PHP 7 | Daten aus HTML-Formular in eine XML-Datei speichern
Wie du Daten aus einem Web-Formular in eine Datenbank speichern kannst, habe ich hier gezeigt: Mysql Datenbankverbindung aufbauen mit pdo und php
Es kann aber durchaus auch mal vorkommen dass keine Datenbank zur Verfügung steht oder die Anbindung an CRM Systeme mittels XML-Datei leichter einzurichten sind.
In diesem Tutorial zeige ich dir wie du die Daten aus einem Web-Formular in eine XML-Datei speichern kannst. Dabei wird bei neuen Anfragen der Inhalt der Datei aktualisiert und nicht überschrieben.
In meinem Beispiel übergebe ich vier Felder:
- Anrede
- Name
- E-Mail-Adresse
- Nachricht
Einen Zeitstempel mittels Timestamp übergebe ich per PHP.
Das HTML-Formular
Hier bedarf es eigentlich keiner großen Erklärung.
<form action="" method="post">
<div class="row">
<div class="form-group col-md-4">
<label for="SelectGender">Anrede</label>
<select name="gender" class="form-control" id="SelectGender">
<option value="Herr">Herr</option>
<option value="Frau">Frau</option>
</select>
</div>
</div>
<div class="form-group">
<label for="InputName">Name</label>
<input name="name" type="name" class="form-control" id="InputName">
</div>
<div class="form-group">
<label for="InputEmail">E-Mail-Adresse <span class="req">PFLICHTFELD</span></label>
<input name="email" type="email" class="form-control" id="InputEmail" aria-describedby="emailHelp" required>
</div>
<div class="form-group">
<label for="TextareaMessage">Nachricht</label>
<textarea name="message" class="form-control" id="TextareaMessage" rows="3"></textarea>
</div>
<div class="form-group">
<input type="hidden" name="optin" value="0">
<input type="checkbox" id="opt-in" name="optin" value="1" class="form-check" required>
<label class="form-check-label" for="opt-in">
<span class="req">PFLICHTFELD</span><br>Ich habe die Hinweise in der Datenschutzerklärung verstanden und stimme diesen hiermit zu.
</label>
</div>
<button type="submit" name="sendform" class="btn btn-dark">Absenden</button>
</form>
Das PHP-Skript
Mit dem folgenden PHP-Skript verarbeiten wir die Daten aus dem HTML-Formular und speichern diese in eine XML-Datei.
$xmlFile = 'formReport.xml';
if ( isset( $_POST['sendform']) && !empty($_POST['email']) && !empty($_POST['optin']) ) {
$email = $_POST['email'];
if ( preg_match("/^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email) ) {
if (!file_exists($xmlFile)) {
$xml = new DOMDocument('1.0', 'ISO-8859-1');
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$base = $xml->createElement('formReport');
} else {
$xml = new DOMDocument('1.0', 'ISO-8859-1');
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$xml->load($xmlFile);
$base = $xml->documentElement;
}
$xml->appendChild($base);
$base->appendChild($xmlItem = $xml->createElement('submit'));
$xmlItem->appendChild($xml->createElement('timestamp', date("Y-m-d H:i:s")));
$xmlItem->appendChild($xml->createElement('gender', $_POST['gender']));
$xmlItem->appendChild($xml->createElement('name', $_POST['name']));
$xmlItem->appendChild($xml->createElement('email', $_POST['email']));
$xmlItem->appendChild($xml->createElement('message', $_POST['message']));
$xml->save($xmlFile);
echo '
<div class="container">
<div class="alert alert-success" role="alert">
Anfrage erfolgreich!
</div>
</div>
';
} else {
echo '
<div class="container">
<div class="alert alert-danger" role="alert">
Bitte eine korrekte E-Mail-Adresse eingeben.
</div>
</div>
';
}
}
Erklärung:
- Zeile 1: Der Dateiname des XML-Files. Sollte es noch nicht vorhanden sein, wird dieses automatisch beim ersten abschicken des Formulars erstellt.
- Zeile 3: Prüft ob das Formular abgeschickt wurde, eine E-Mail-Adresse hinterlegt wurde und die Checkbox aktiviert wurde
- Zeile 6: Prüft die Schreibweise der E-Mail-Adresse (Ist ein @ vorhanden und hat es eine korrekte Domainendung)
- Zeilen 9-12: Erstellt wenn noch nicht vorhanden das XML-File
- Zeile 22: Erstellt das Basis-Element „submit“ in dem jede einzelne Anfrage im XML-File gelistet wird
- Zeile 24: Speichert den Timestamp beim versenden des Formulars
- Zeilen 25-28: Fügt die Daten aus dem Formular in die dementsprechenden XML Elemente
- Zeile 30: Speichert die Daten in das XML-File
Inhalt der XML-Datei
Die Daten werden dann in der XML-Datei wie folgt gespeichert.
<?xml version="1.0" encoding="ISO-8859-1"?>
<formReport>
<submit>
<timestamp>2019-09-17 13:02:18</timestamp>
<gender>Herr</gender>
<name>Muster</name>
<email>muster@mustermann.de</email>
<message>Tolles Skript</message>
</submit>
<submit>
<timestamp>2019-09-17 13:05:18</timestamp>
<gender>Frau</gender>
<name>Muster</name>
<email>muster@musterfrau.de</email>
<message>Das stimmt!</message>
</submit>
</formReport>

Kommentare
Hallo,
eine Frage: wie kann ich bei einer existierenden xml-Datei die Daten darin mit diesem Script überschreiben lassen? Derzeit fügt er immer wieder an…
VG
Dennis
Hallo Dennis, entferne einfach Zeile 8 und 13-19 (Die if Abfrage). Es bleiben somit nur noch die Zeilen 9-12. Dadurch wird jedes mal ein neues File erstellt und das alte wird überschrieben.
Weitere Beiträge
TYPO3 Ressourcen Image auslesen und anzeigen ab Version 6.2
Wie du die richtige Programmiersprache für deinen Weg auswählst
OXID 6 | Modul erstellen mit Namespaces und Composer
TYPO3 Backend Editor in eigener Extension nutzen