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 vs. Wordpress: Welches Content Management System bringt dich an die Spitze deiner Branche?
Digitale Barrierefreiheit ab 2025.
Progressive Web Apps (PWAs): Die Zukunft des Webs
Smooth Scrolling zu jedem Anker mit jQuery.