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
Aktien und ETFs kaufen

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.

Datenschutz
Programmier-Tipps - Programmieren lernen ist nicht schwer!

Wir verwenden Cookies, um unsere Webseite für Dich optimal zu gestalten, fortlaufend zu verbessern und die Zugriffe auf unsere Webseite zu analysieren. Cookie-Informationen werden in deinem Browser gespeichert und helfen uns zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind. Genauere Informationen findest du in unserer Datenschutzerklärung.

Notwendige Cookies

Notwendige Cookies sollten jederzeit aktiviert sein, damit wir deine Einstellungen für die Cookie-Einstellungen speichern können. Details findest du in unserer Datenschutzerklärung.

Google AdSense

Diese Website benutzt Google AdSense, einen Dienst zum Einbinden von Werbeanzeigen der Google Inc. ("Google"). Google AdSense verwendet sogenannte „Cookies“, Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website ermöglichen. Genauere Informationen findest du in unserer Datenschutzerklärung.

Diesen Cookie aktiviert zu lassen, unterstützt uns ohne dass du Geld ausgeben musst.

Google Analytics

Diese Website nutzt den Webanalysedienst Google Analytics, der sogenannte Cookies einsetzt. Dies sind kleine Textdateien, die auf Ihrem Device gespeichert werden und eine Analyse der Website-Nutzung ermöglichen. Die erzeugten Informationen werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert. Weitere Informationen findest du in unserer Datenschutzerklärung.

Das aktivieren ermöglicht es uns unsere Webseite für dich noch attraktiver zu machen.