Formular erstellen für Dateneingabe

Wir werden ein sehr einfaches Formular ohne Überprüfung der Daten erstellen. Hier wird man später deutlich noch Absicherungen gegen unerwünschte Daten machen. Für das Verständnis ist hier die grundlegende Form eines Formulars von Vorteil.

Auch hier kommt reines HTML zum Einsatz!

<form action="" method="post">
    <label>Vorname: 
        <input type="text" name="vorname" id="vorname">
    </label>
    <label>Nachname: 
        <input type="text" name="nachname" id="nachname">
    </label>
    <label>Anmerkungen: 
        <textarea name="anmerkungen" id="anmerkungen"></textarea>
    </label>
    <input type="submit" value="speichern">
</form>

Bei dem HTML-Befehl form wird durch das leere Attribut action="" die gleiche Seite im Browser aufgerufen und die Daten werden im Header über post (method="post") übergeben.

Der HTML-Befehl <label> bewirkt, dass der Cursor in das entsprechende Eingabefeld springt, auch wenn nur die Beschriftung angeklickt wird. Das ist für die Nutzerfreundlichkeit wichtig – der Begriff Usability kommt hier zum Zuge.

Da es Möglichkeiten gibt, dass das Formular ohne das Anklicken des Submit-Buttons abgesendet wird, erstellen wir noch ein zusätzliches verstecktes Feld mit der aktuellen Uhrzeit. Dieses bekommt den Namen „aktion“ – in deutsch geschrieben um Verwechslungen mit dem Attribut „action“ von dem HTML-Befehl <form> zu vermeiden.

    <input type="hidden" name="aktion" value="speichern">
    <input type="submit" value="speichern">
</form>

Jetzt können wir am Anfang unseres PHP-Programmes überprüfen, ob eine Eingabe mit Absenden über das Formular erfolgt ist.

Überprüfen, ob Formulareingaben vorliegen

Nachdem wir das Formular am Ende unseres Codes platziert haben, müssen wir ganz am Anfang abfragen, ob ein Absenden des Formulars vorliegt. Das machen wird deshalb am Anfang, damit die Daten gleich in die Datenbank geschrieben werden können und danach über bereits bestehende Ausgaberoutine ausgegeben werden.

Wir habe ein unsichtbares Feld mit dem Attribut name="aktion" und dem Wert „speichern“.

Diesen Wert können wir abfragen. Vorteil ist von diesem unsichtbaren Feld, dass wir auch leere Felder zulassen können wie beispielsweise den Vornamen.

if (isset($_POST['aktion']) and $_POST['aktion']=='speichern') {
}

Innerhalb der IF-Bedingung können wir nun die einzelnen Inhalte, die in dem Array $_POST stecken auswerten und Variablen zuweisen. Natürlich können wir hier die übergebenen Daten auch entsprechenden vorbereiten. Leerzeichen, die versehentlich am Anfang oder Ende eingegeben wurden, können beseitigt werden.

if (isset($_POST['aktion']) and $_POST['aktion']=='speichern') {
    $vorname = "";
    if (isset($_POST['vorname'])) {
        $vorname = trim($_POST['vorname']);
    }
}

Es wird im ersten Schritt eine leere Variable für jedes Feld erstellt. Im obigen Beispiel $vorname = "";

Dieses Vorgehen hat den Vorteil, dass wie keine Fehlermeldung für ungesetzte Variablen erhalten. Die Variablen werden nur gesetzt, wenn vom Nutzer im Formular im entsprechenden Feld eine Eingabe gemacht wurde. Es kann nun sein, dass der Nachname ausgefüllt wurde, aber der Vorname nicht (weil nicht bekannt). Trotzdem wollen wir das Speichern in der Datenbank zulassen. Später können wir auch noch Felder bestimmen, die Pflichtfelder sind (beispielsweise den Nachnamen). Jetzt geht es erst einmal um das Prinzip, wie die Vorgehensweise beim Speichern in die Datenbank ist.

Wir erstellen für alle Felder die entsprechenden Variablen und füllen diese:

<?php
if (isset($_POST['aktion']) and $_POST['aktion']=='speichern') {
    $vorname = "";
    if (isset($_POST['vorname'])) {
        $vorname = trim($_POST['vorname']);
    }
    $nachname = "";
    if (isset($_POST['nachname'])) {
        $nachname = trim($_POST['nachname']);
    }
    $anmerkungen = "";
    if (isset($_POST['anmerkungen'])) {
        $anmerkungen = trim($_POST['anmerkungen']);
    }
    $erstellt = date("Y-m-d H:i:s");
}
?>

Das Erstellungsdatum können wir über die MySQL-Anweisung NOW() erstellen lassen oder in PHP über date("Y-m-d H:i:s"). Unten werden wir aus didaktischen Gründen NOW() verwenden. Die durch PHP erstellte Variable $erstellt wird dann auch klar, wie man diese verwenden könnte.

Oben versteckt sich noch ein kleiner Fehler. Wurden nur Leerzeichen in ein Formularfeld eingetragen, gibt es ein Problem. Einfach einmal probieren .

Daher wir das Speichern in eine weitere if-Bedingung gepackt:

    if ( $vorname != '' or $nachname != '' or $anmerkung != '' )
    {
        // speichern
    }

Jetzt kommen wir wieder zu den typischen 4 Schritten, die im nächsten Kapitel beschrieben sind:

  • SQL-Anweisung vorbereiten
  • Die gewünschten Felder an die SQL-Anweisung binden
  • Die SQL-Anweisung ausführen
  • die gewünschten Variablen für die Rückgabe an die SQL-Anweisung binden

kompletter Quellcode, der in diesem Kapitel entstanden ist:

<?php
require 'inc/db.php';
if (isset($_POST['aktion']) and $_POST['aktion']=='speichern') {
    $vorname = "";
    if (isset($_POST['vorname'])) {
        $vorname = trim($_POST['vorname']);
    }
    $nachname = "";
    if (isset($_POST['nachname'])) {
        $nachname = trim($_POST['nachname']);
    }
    $anmerkungen = "";
    if (isset($_POST['anmerkungen'])) {
        $anmerkungen = trim($_POST['anmerkungen']);
    }
    $erstellt = date("Y-m-d H:i:s");
    if ( $vorname != '' or $nachname != '' or $anmerkung != '' )
    {
        // speichern
    }	
}
$daten = array();
if ($erg = $db->query("SELECT * FROM kontakte")) {
    if ($erg->num_rows) {
        while($datensatz = $erg->fetch_object()) {
            $daten[] = $datensatz;
        }
        $erg->free();
    }	
}
if (!count($daten)) {
    echo "<p>Es liegen keine Daten vor :(</p>";
} else {
?>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Vorname</th>
                <th>Nachname</th>
                <th>Anmerkungen</th>
                <th>erstellt</th>
            </tr>
        </thead>
        <tbody>
            <?php
            foreach ($daten as $inhalt) {
            ?>
                <tr>
                    <td><?php echo $inhalt->id; ?></td>
                    <td><?php echo $inhalt->vorname; ?></td>
                    <td><?php echo $inhalt->nachname; ?></td>
                    <td><?php echo $inhalt->anmerkungen; ?></td>
                    <td><?php echo $inhalt->erstellt; ?></td>
                </tr>
            <?php
            }
            ?>
        </tbody>
    </table>
<?php	
}
?>
<form action="" method="post">
    <label>Vorname: 
        <input type="text" name="vorname" id="vorname">
    </label>
    <label>Nachname: 
        <input type="text" name="nachname" id="nachname">
    </label>
    <label>Anmerkungen: 
        <textarea name="anmerkungen" id="anmerkungen"></textarea>
    </label>
    <input type="hidden" name="aktion" value="speichern">
    <input type="submit" value="speichern">
</form>