Auftrag 10: Serverseitige Formularvalidierung

Einzelarbeit, Zeit: 60 Minuten

Einleitung

Da die clientseitige Validierung ausgeschaltet oder umgangen werden kann, ist es wichtig die Daten beim empfangenden Server zu überprüfen bevor diese weiterverarbeitet werden. Dies ist nicht nur aus Anwendungssicht sehr wichtig, sondern gleichermassen aus Sicherheitsgründen. Deshalb werden die übermittelten Formulardaten auch immer beim empfangenen Server nochmals geprüft.  

Auftrag

Erweitern Sie Ihr Kontaktformular aus Auftrag 7 so, dass die Formulardaten serverseitig vor der weiteren Verarbeitung geprüft werden. Fertigen Sie für diesen Auftrag eine Kopie der aus Auftrag 7 stammenden Dateien an, sodass Sie die Originaldateien nicht modifizieren müssen.

Vorgehen

 

  1. Damit das Formular serverseitig validiert werden kann, müssen Sie in der empfangenden PHP-Seite Code einfügen. Die empfangende PHP Datei ist diejenige, welche im „action“-Attribut des <form>-Tags angegeben wurde.
  2. Damit wir die serverseitige Validierung auf einfache Weise überprüfen können, müssen wir die Validierung der modernen Browser durch das „novalidate“ Attribut im <form>-Tag  zwischenzeitlich deaktivieren: 
    <form action="..." method="..." novalidate>
  3. Falls Sie zusätzliche Validierungen mithilfe von JavaScript machen, so kommentieren Sie diese bitte aus.
  4. Versuchen Sie nun in PHP die übermittelten Daten abzugreifen und in einem ersten Schritt einfach mal auszugeben. Auf die Parameter zuzugreifen erfolgt über die Variable $_GET oder $_POST, je nach Übermittlungsmethode (gemäss „method“-Attribut auf dem <form>-Tag). Wenn die Übermittlungsmethode keine Rolle spielt, kann die Variable $_REQUEST genutzt werden.
  5. Falls Sie nun also z.B. prüfen möchten, ob das Feld „lastname“ leer ist, so könnten Sie folgendes schreiben:
    <?php
    if (empty($_REQUEST['lastname'])) {
       echo 'der Nachname ist leer';
    } else {
       echo 'der Nachname ist ausgefuellt';
    }
    ?>

    Mit dem Negationsoperator „!“ können Sie Aussagen auch umkehren „!empty(…)“ würde dann also prüfen, ob ein Feld „nicht leer“ ist.

  6. Geben Sie entsprechende Fehlermeldungen aus für die erforderlichen Felder, die nicht ausgefüllt wurden.
  7. Sorgen Sie in diesem Schritt dafür, dass die Felder nach dem Absenden nicht wieder leer sind, sondern die abgeschickten Werte beinhalten. Geben Sie dazu einfach die empfangenen Werte wieder im „value“-Attribut des jeweiligen <input>-Tags an. Sie können dazu einen Code wie z.B. diesen nutzen:
    <input type="text" name="beispiel" value="<?php echo $_REQUEST['beispiel'] ?? '' ?>" />
    . Der „??“ Operator prüft ob der links davon angegebene Ausdruck leer ist. Falls ja wird einfach der rechts davon stehende Wert zurückgegeben. Falls nicht, wird der links davon stehende Wert zurückgegeben. Das ist ziemlich handlich und kompakt.
  8. Für das Tag TEXTAREA gibt es das Attribut „value“ nicht. Hier muss der Inhalt zwischen das Start- und End-Tag geschrieben werden:
    <textarea name="message" id="message"><?php echo $_REQUEST['message'] ?? ''; ?></textarea>
  9. Um den Standardwert bei <select>-Tags zu setzten, muss der gewählte Wert abgefragt werden und dann die entsprechende Option auf „selected“ gestellt werden. Der <select>-Tag sieht dann wie folgt aus.
    <select name="...">
    <option value="" <?php if (empty($_GET['contact'])) {echo 'selected="selected"';} ?>>keine</option>
    <option value="morgens" <?php if (!empty($_GET['contact']) && $_GET['contact'] == 'morgens') {echo 'selected="selected"';} ?>>Morgens</option>
    <option value="mittags" <?php if (!empty($_GET['contact']) && $_GET['contact'] == 'mittags') {echo 'selected="selected"';} ?>>Mittags</option>
    <option value="abends" <?php if (!empty($_GET['contact']) && $_GET['contact'] == 'abends') {echo 'selected="selected"';} ?>>Abends</option>
    <option value="ganzerTag" <?php if (!empty($_GET['contact']) && $_GET['contact'] == 'ganzerTag') {echo 'selected="selected"';} ?>>Ganzer Tag</option>
    </select>

Wenn Sie noch Zeit haben, versuchen Sie herauszufinden, wie Sie nun in PHP auf die Eingabe einer gültigen Emailadresse validieren können und versuchen Sie Ihren PHP-Code entsprechend zu erweitern.