# 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

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?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 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

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?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.