Formulardaten mit PHP in XML schreiben.

BELL

Mitglied
Hallo Allerseits,

Ich arbeite grade an einem Projekt, wofür ich folgendes Benötige: Der Benutzer gibt in ein HTML-Formular verschiedene Daten ein, diese Daten sollen nun per PHP in eine XML-Datei geschrieben werden. Bei dem Projekt geht es darum, dass der Kunde etwas bestellt und daher währe es super, wenn jeder Bestellung (bzw jedem Datensatz) eine Bestellungsnummer zugeordnet wird. Ich habe es mithilfe von Google und PHP-Büchern schon versucht, den Code für das Formular und meinen Versuch stelle ich hier unten rein:

HTML:
<form action="X.php" method="post">
 <div style="margin-left:auto;
margin-right:auto;
width: 600px;
height: 450px;"><font face="Arial" size="6">Ihr Name:  <input type="text" name="vorname" placeholder="Mustermann" autofocus style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihr Vorname: <input type="text" name="name" placeholder="Max" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihre Straße: <input type="text" name="straße" placeholder="Musterstraße" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihre Hausnummer: <input type="number" name="hausnummer" placeholder="42" min="0" step="1" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <br>
 <input type="image" src="Absenden.png" alt="Absenden"></div>
</form>

Mein Versuch (in X.php):

PHP:
<?php
   header("Content-type: text/xml; charset=utf-8");
   echo '<?xml version="1.0" encoding="UTF-8"?>';
   echo "\n";
   $dom = new DomDocument('1.0', 'utf-8');
   //Wurzel
   $root = $dom->createElement("Order");
   $dom->appendChild($root);
   
   // Kinder-Elemente erstellen
   $root->appendChild($dom->createElement('VorName'));
   $root->appendChild($dom->createElement('Name'));
   $root->appendChild($dom->createElement('Straße'));
   $root->appendChild($dom->createElement('Straßennummer'));

   // Kinderelemente befüllen
   VorName->appendChild($dom->createTextNode("$_GET['vorname']"));
   Name->appendChild($dom->createTextNode("$_GET['name']"));
   Straße->appendChild($dom->createTextNode("$_GET['straße']"));
   Straßennummer->appendChild($dom->createTextNode("$_GET['hausnummer']"));
   
   echo $dom->saveXML();
?>

Es wird aber bei X.php nur weiss angezeigt und wie ich das mit der Bestellungsnummer hinbekommen soll, ist mir ein Rätsel.

Ich bedanke mich im Vorraus für jede Antwort und freue mich über jede die zur Lösung beiträgt.
Danke fürs lesen,

BELL
 
Hi

diese Daten sollen nun per PHP in eine XML-Datei geschrieben werden
dein Code schreibt nicht in eine Datei am Server, sondern gibt eine XML-Datei zum Browser zurück.
Ist das so gedacht?

Code:
$root->appendChild($dom->createElement('VorName'));
...
VorName->appendChild($dom->createTextNode("$_GET['vorname']"));
Das (und die anderen drei ähnlichen Teile) kann so nicht gehen. VorName in der zweiten Zeile ist nichts. Variablen beginnen erstens mit $, und zweitens gibt es kein $VorName, nur weil $root ein Kindelement bekommen hat.
Eher sowas nehmen:

Code:
$VorName = $dom->createElement('VorName');
$VorName->appendChild($dom->createTextNode("$_GET['vorname']"));
$root->appendChild($VorName);
 
Nein, die datei sollte zur späteren Verarbeitung auf dem Server gespeichert werden.
Den rest schaue ich mir Morgen an.

Danke!
 
Ja, ich denke auch, dass es die sinnvollste Option ist, die Daten in der Datenbank zu halten und potenziell benötigte XML-Dokumente (für weiterverarbeitende Software oder dergleichen) bei Bedarf auf Basis der DB-Daten zu generieren.

Es ist zwar per Locking grundsätzlich möglich, auch die Generierung einer XML-Datei ausreichend frei von Race Conditions hinzubekommen, aber es ist nur einer der Vorteile einer richtigen DB, dass sie derlei Mechanismen bereits eingebaut hat.
 
OK ich habe mir mal MySQL geholt + eingerichtet, wie würde man denn die Formular-Daten in die Database bekommen?
 
Grundlegende Tutorials dazu etwa:

- http://tut.php-quake.net/de/mysql.html
- http://www.peterkropff.de/site/php/mysqli.htm
- Doku: http://php.net/manual/en/book.mysqli.php

Du kannst alternativ auch via PDO auf MySQL zugreifen. PDO ist eine vereinheitlichte API/Schnittstelle (für unterschiedliche Datenbanksysteme), die von vielen Leuten bevorzugt wird. Inhaltlich gibt sich das nicht viel.

- http://www.peterkropff.de/site/php/pdo.htm
- Doku: http://php.net/manual/en/book.pdo.php

sheel hat gesagt.:
(Ohhh :D, PHP hat flock. Muss ich bisher wohl irgendwie übersehen haben ... Immerhin etwas)

Ja, file_put_contents hat dafür auch einen Parameter. Leider weiß man nie, wie sich in Libs integrierte Methoden dahingehend verhalten. (Achten vermutlich nicht darauf, würde ich tippen.) Das macht Methoden wie DOMDocument::save etwas schwierig einzusetzen, wenn man es genau nimmt und nicht etwa anders für „Threadsicherheit“ sorgt.

Das gilt theoretisch auch oft für eigenen Code, den man schreibt. Ich habe deshalb mal angedacht, alle I/O-Operationen auf Streams umzubauen, aber so wirklich habe ich mich auch nie dran gehalten, weil es irgendwie nicht praktikabel ist.

Bei Interesse: https://www.php.de/forum/webentwick...ne/95646-streams-abstraktion-von-dateizugriff

Wird dafür auch Libs geben. Ich mache derzeit leider zu wenig „gehobene“ PHP-Entwicklung, um mich da auszukennen. Auch in Hinblick darauf, was vielleicht Frameworks anbieten.

Es fühlt sich vor allem auch oft sinnfrei an, darüber nachzudenken, weil das Aspekte sind, die andere Sprachen längst elegant gelöst haben. Das ist es, was PHP zu einer komplizierten Sprache macht, die teilweise sehr viel schwieriger zu programmieren ist als Java oder .NET. PHP ist letztlich doch ein eher dünner Wrapper um C-Libs, die sehr low-level sind.

Wenn man zu sehr über so was grübelt, frage zumindest ich mich schnell, warum ich es nicht einfach hinschmeiße.
 
Zuletzt bearbeitet:
Hi,

Ich habe jetzt einen Code zusammengeschustert, der die Ergebnisse des Formulars in die Tabell "daten" der DB "bell" schreiben sollte.

PHP:
<?php
$db = mysqli_connect("localhost", "php", "passwort", "bell");
if(!$db)
{
  exit("Verbindungsfehler: ".mysqli_connect_error());
}
$vname = $_POST["vorname"];
$name = $_POST["name"];
$str = $_POST["strasse"];
$strnr = $_POST["hausnummer"];
$eintragen = mysqli_query($db, "INSERT INTO daten (VORNAME, NACHNAME, STRASSE, STRASSENNUMMER) VALUES ('$vname', '$name', '$str', '$strnr')");
?>

Allerdings sagt mir der Client, dass die Tabelle "daten" keine Datensätze enthalten würde. Was habe ich vergeigt? Wie wäre es Richtig?
Hinweis: Ich habe schon überprüft, dass die bei POST genannten daten mit den Namen der Formularfelder übereinstimmen. Die Änderung von "Straße" in "Strasse" habe ich auch im Formular vorgenommen.

Vielen, vielen Dank,

BELL
 

Neue Beiträge

Zurück