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>
* Werbung/Affiliate Link
Krypto Traden

Kommentare

  • Dennis
    26.06.2023 - 15:32 Uhr

    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

    Antworten
    • Markus
      27.06.2023 - 06:42 Uhr

      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.

      Antworten

Schreibe einen Kommentar

Erforderliche Felder sind entsprechend markiert.

Wird nicht veröffentlicht.