4.9.5 Beispiel Formulare - Daten speichern

Im ersten Beispiel sollen die übertragenen Daten auf der Festplatte des Servers in einer Textdatei gespeichert werden. Im zweiten Beispiel werden die Daten ebenfalls in einer Textdatei gespeichert, aber diesmal im JSON-Format.

Speichern in einer Textdatei

<?php
/**
 * Beispiel Formular - Daten einlesen und speichern
 * @author Jörg Thomaschewski
 * @date 04.04.2024
 */

function writeHeaderAndHeadline($title = "Formulardaten Speichern und Auslesen")
{
    echo "<!DOCTYPE html>
          <html lang=\"de\">
          <head><title>$title</title>
          </head>
          <body>";
    if (empty($_POST)) {
        echo "<h1>Beispielformular</h1>";
    } else {
        echo "<h1>Daten auslesen</h1>";
    }
}

function startForm($method, $action)
{
    echo "<form method=\"$method\" action=\"$action\">";
}

function writeInputField($text, $name)
{
    echo "<label for=\"$name\">$text: </label>
          <input type=\"text\" name=\"$name\" id=\"$name\"><br><br>";
}

function closeForm()
{
    echo "<input type=\"submit\" value=\"Formular abschicken\"></form>";
}

function closeFooter()
{
    echo "</body></html>";
}

// Beginn des Hauptprogramms
writeHeaderAndHeadline();

if (empty($_POST)) {
    // Formular anzeigen
    startForm("post", "");
    writeInputField("Vorname", "vorname");
    writeInputField("Name", "nachname");
    closeForm();
} else {
    // Daten speichern
    $daten = "";
    foreach ($_POST as $field => $content) {
        $daten .= $field . ": " . $content . "\n";
    }
    file_put_contents("formulardaten.txt", $daten, FILE_APPEND);

    // Gespeicherte Daten wieder auslesen
    echo "Es wurden folgende Daten gespeichert:<br>"; 
    $textOut = file_get_contents("formulardaten.txt");
    echo "$textOut";
}

closeFooter();
?>

Screenshot des erzeugten Formulars

Screenshot des erzeugten Formulars

Screenshot der erzeugten Ausgabe

Screenshot der erzeugten Ausgabe

Die Neuerungen sind in den Zeilen 53-63 enthalten. Zuerst werden alle Formulardaten in einen String verpackt (Zeilen 55-57) und dann in einer Textdatei auf dem Server gespeichert (Zeile 58). Damit die vorherigen Daten nicht überschrieben werden, wird die Syntax FILE_APPEND genutzt.

In Zeile 62 wird dann der String aus der Textdatei wieder ausgelesen.

Sicherheitshinweis

Bitte an die Sicherheit denken und NIE Benutzereingaben als Variable in einen Funktionsaufruf schreiben! Und schon gar nicht auf dem Server abspeichern. Überlegen Sie einmal, was dabei alles passieren könnte.

Speichern in einer Textdatei im JSON-Format

<?php
/**
 * Beispiel Formular - Daten einlesen, speichern und auslesen im JSON-Format
 * @author Jörg Thomaschewski
 * @date 04.04.2024
 */

function writeHeaderAndHeadline($title = "Formulardaten Speichern und Auslesen im JSON-Format")
{
    echo "<!DOCTYPE html>
          <html lang=\"de\">
          <head><title>$title</title>
          </head>
          <body>";
    if (empty($_POST)) {
        echo "<h1>Beispielformular</h1>";
    } else {
        echo "<h1>Daten auslesen</h1>";
    }
}

function startForm($method, $action)
{
    echo "<form method=\"$method\" action=\"$action\">";
}

function writeInputField($text, $name)
{
    echo "<label for=\"$name\">$text: </label>
          <input type=\"text\" name=\"$name\" id=\"$name\"><br><br>";
}

function closeForm()
{
    echo "<input type=\"submit\" value=\"Formular abschicken\"></form>";
}

function closeFooter()
{
    echo "</body></html>";
}

// Dateipfad zur Speicherung der Daten
$filePath = "formulardaten.json";

// Beginn des Hauptprogramms
writeHeaderAndHeadline();

if (empty($_POST)) {
    // Formular anzeigen
    startForm("post", "");
    writeInputField("Vorname", "vorname");
    writeInputField("Name", "nachname");
    closeForm();
} else {
    // Daten im JSON-Format speichern
    file_put_contents($filePath, json_encode($_POST, JSON_PRETTY_PRINT));
    echo "Ihre Daten wurden im JSON-Format gespeichert.<br>";
}

// Gespeicherte Daten im JSON-Format auslesen
if (file_exists($filePath)) {
    echo "<br>Gespeicherte Daten im JSON-Format:<br>";
    echo nl2br(htmlspecialchars(file_get_contents($filePath)));
} else {
    echo "<br>Noch keine Daten im JSON-Format gespeichert.<br>";
}

closeFooter();
?>

Sicherheitshinweis

Weil es so wichtig ist, hier nochmal: bitte an die Sicherheit denken und NIE Benutzereingaben als Variable in einen Funktionsaufruf schreiben! Und schon gar nicht auf dem Server abspeichern. Überlegen Sie einmal, was dabei alles passieren könnte.

Die PHP-Funktionen file_exists(), nl2br(), htmlspecialchars() behandeln wir im nächsten Kapitel.