HTML Formular Daten per PHP in XML speichern

matthiasschnueriger

Erfahrenes Mitglied
Hallo PHPler

Ich möchte die Daten aus einem HTML Formular (ausgewählter Radio-Button sowie ausgewählte Checkboxen) in ein XML-File übergeben.

Ich habe es soweit hingekriegt, dass das XML beschrieben wird, sobald das HTML-Formular abgeschickt wird. Das Problem ist allerdings, dass ab dem 2. und folgenden Abschicken kein weiterer Datensatz hinzugefügt wird, sondern der 1. überschrieben wird.

Was muss ich anpassen, damit mein XML bei jedem Formular-Versenden erweitert und nicht einfach ersetzt wird?

Hier mein zusammengeflickter Code:
PHP:
<?php
// Prüfen des Arrays $_FILES
if (isset($_FILES["datei"])) {

// Upload-Status
if ($_FILES["datei"]["error"] == UPLOAD_ERR_OK) {

// Muster zur Überprüfung der im Dateinamen
// enthaltenen Zeichen (Optional)
$regExp = "/^[a-z_]([a-z0-9_-]*\.?[a-z0-9_-])*\.[a-z]{3,4}$/i";

// Dateiname und Dateigröße
if (preg_match($regExp,$_FILES["datei"]["name"]) && $_FILES["datei"]["size"] > 0 && $_FILES["datei"]["size"] < 100000) {

// Temporäre Datei in das Zielverzeichnis
// des Servers verschieben.
move_uploaded_file($_FILES["datei"]["tmp_name"],"rezepte/".$_FILES["datei"]["name"]);

// Redirect zur Erfolgsmeldung

}
else {
  echo "Fehler: Im Dateinamen oder Dateigrössen Limit!";
}
}
else {
  echo "Fehler: Während der Übertragung aufgetreten!";
}
}
else {
  echo "Fehler: Dateiupload fehlgeschlagen!";
}


//////////////////////////// XML Speichern ///////////////////////////

	
  $rezept = $_POST;


  $doc = new DOMDocument();
  $doc->formatOutput = true;
  
  $r = $doc->createElement( "rezeptdaten" );
  $doc->appendChild( $r );
  
  $b = $doc->createElement( "rezept" );
  
  $hauptkomponente = $doc->createElement( "hauptkomponente" );
  $hauptkomponente->appendChild(
  	$doc->createTextNode( $rezept['hauptkomponente'] )
  );
  $b->appendChild( $hauptkomponente );
  
	$i = 1;
	foreach ($rezept['nebenkomponente'] as $nebenkomponente => $value){
			$n = $doc->createElement("nebenkomponente".$i++);
		  $n->appendChild(
		  	$doc->createTextNode($nebenkomponente)
		  );
		  $b->appendChild( $n );
	}
  $r->appendChild( $b );

  $doc->save("rezeptdaten.xml");

?>
 
Moin, du müsstest halt gucken, ob sie bereits existiert.

Falls es bereits existiert, müsstest du statt dieser beiden Zeilen
Code:
$r = $doc->createElement( "rezeptdaten" );
  $doc->appendChild( $r );

folgendes tun

Code:
$doc->load('rezeptdaten.xml');//vorhandene Datei laden
$r = $doc->documentElement;//Zeiger auf Root-Node
 
Ich habe doch noch ein kleines Problemchen und deshalb den Beitrag nochmals geöffnet.

Ich möchte gerne ein neues Tag im XML-File hinzufügen, welches den Dateinamen des hochgeladenen Files speichert.

Dafür habe ich einfach den Code für das XML-Tag <hauptkomponente> kopiert und wollte dieses anpassen.

PHP:
  $rezept = $_POST;

  $doc = new DOMDocument();
  $doc->formatOutput = true;
  
$doc->load('rezeptdaten.xml');//vorhandene Datei laden
$r = $doc->documentElement;//Zeiger auf Root-Node
  
  $b = $doc->createElement( "rezept" );

// der Eintrag für die Hauptkomponente (funktioniert)

  $hauptkomponente = $doc->createElement( "hauptkomponente" );
  $hauptkomponente->appendChild(
  	$doc->createTextNode( $rezept['hauptkomponente'] )
  );
  $b->appendChild( $hauptkomponente );

// der Eintrag für die Hauptkomponente (funktioniert nicht)

  $datei = $doc->createElement( "datei" );
  $datei->appendChild(
  	$doc->createTextNode( $rezept['datei'] )
  );
  $b->appendChild( $datei );

Ich vermute, dass ich jetzt den Dateinamen einfach über $_FILES['datei']['name'] einfügen könnte, oder?

Übrigens, mein Input-Feld im HTML-Formular hat den namen "datei":
HTML:
<input type="file" name="datei" size="40" maxlength="100000">
 
Zurück