📋
M307 - Interaktive Webseiten mit Form
  • Interaktive Webseite mit Formular erstellen
  • Tag 1
    • 01-Interaktive Websites
    • 02-Client-Server-Infrastruktur
    • 03 Einrichtung Entwicklungsumgebung
    • 04 PHP
      • 01 Einführung
      • 02 PHP Konfiguration
      • 03 PHP Übersicht
      • 04 Variablen
      • 05 Script Einbindung
      • 06 Arrays
      • 07 Kontrollstrukturen
      • 08 Interne Funktionen
      • 09 Benutzerdefinierte Funktionen
      • 10 Klassen
      • 11 Best Practices
      • 12 Links
    • 05 Strukturierung
      • Aufbau eines MVC (Schritt für Schritt)
    • 06 PHP Aufgaben
      • 01 Bottles of Beer
      • 02 Einfacher Spamfilter
      • 03 Clowns
      • 04 Pixelgenerator
      • 05 Todo-Liste
      • 06 Login-Funktion
      • 07 Navigation
      • 08 Gemeinsames Template
  • Tag 2
    • 01 Formulare Theorie
      • 01 Informationsgruppierung
      • 02 Design- und Strukturgrundlagen
      • 03 Verarbeiten von Formulardaten
      • 04 Validieren von Formulardaten
    • 02 JavaScript Theorie
      • 01 Einfuehrung
      • 02 JavaScript Übersicht
    • 03 Übungsaufgaben zu JavaScript
      • 01 Schere, Stein, Papier
      • 02 Whack-a-Button
    • 04 JavaScript Validierung
      • 01 Validierung
      • 02 Vor- und Nachteile
      • 03 Aufgabe
  • Tag 3
    • 01 Datenbankanbindung
      • 01 Datenbankanbindung
      • 02 Datenbankverbindung
      • 03 Datenbankabfragen
      • 05 Datenlöschung
      • 04 Datenspeicherung
      • 06 Datenmanipulation
      • 07 Refactoring
    • 02 Testing
    • 03 Security Aufgaben
      • 01 Gruppenarbeit
        • 01 Arbeitsauftrag
        • 02 Cross-Site-Scripting (XSS)
        • 03 SQL-Injections
        • 04 Local File Inclusion
      • 02 Eigenes Formular absichern
      • 03 Karl's Website
    • 04 Applikationssicherheit
Powered by GitBook
On this page
  • Existenz überprüfen
  • Werte aus Superglobals in Variablen übernehmen
  • Daten bereinigen
  • Logik/Bereiche überprüfen
  • Leere Eingaben
  • Feldspezifische-Überprüfung
  • Format überprüfen
  • filter_var
  • Reguläre Ausdrücke
  • Aufgabe: Validierung (Einzelarbeit)
  • Aufgabe: Usability (Einzelarbeit)

Was this helpful?

Export as PDF
  1. Tag 2
  2. 01 Formulare Theorie

04 Validieren von Formulardaten

Das Validieren oder «Prüfen» der empfangenen Daten ist enorm wichtig, da unerwartete oder nicht vorhandene Daten zu fehlerhaften oder unbrauchbaren Resultaten führen.

Grundsätzlich gilt es die Daten auf folgende Punkte zu überprüfen:

  • Sind alle benötigten Daten vorhanden (alle Pflichtfelder ausgefüllt)?

  • Sind die Daten logisch, liegen sie in einem gültigen Bereich (Geburtsdatum in der Vergangenheit)?

  • Entsprechen die Daten dem gewünschten Format (Email, PLZ etc.)?

Existenz überprüfen

Werte aus Superglobals in Variablen übernehmen

Damit nicht mit der Superglobalen $_POST gearbeitet werden muss, bietet es sich an, die Werte in eigene Variablen zu übernehmen und bei nicht vorhandenen Feldern ein eigener Standard-Wert zu setzen.

Um zu überprüfen, ob ein Formularfeld in einem POST-Request vorhanden ist, muss die Existenz des gewünschten Schlüssels in der $_POST Variable überprüft werden.

Eine Möglichkeit dies zu tun ist mittels isset(). isset() überprüft, ob eine Variable vorhanden und nicht null ist. Es wird nicht überprüft, ob die Variable leer ist.

if($_SERVER['REQUEST_METHOD'] === 'POST') {

    $name = ''; // Standard-Wert für die Variable setzen

    if(isset($_POST['name'])) {
        // Das Feld wurde mitgesendet, wir können den Wert also übernehmen
        $name = $_POST['name'];
    }

}

Der Null Coalesce Operator bietet uns eine einfache Möglichkeit, obenstehenden Code zu vereinfachen.

if($_SERVER['REQUEST_METHOD'] === 'POST') {
    // $_POST['name'] in die Variable übernehmen, 
    // falls vorhanden. Ansonsten '' als Standardwert,
    // in die Variable speichern.
    $name = $_POST['name'] ?? '';
}

Daten bereinigen

Bevor die Daten weiter validiert werden, sollten sie noch bereinigt werden. Leerzeichen am Anfang und Ende einer Eingabe, möchten wir zum Beispiel entfernen. Dafür können wir die trim-Funktion verwenden.

So können wir verhindern, dass ein Pflichtfeld nur mit Leerzeichen gefüllt wird. Auch Leerzeichen am Ende von Email-Adressen, wie sie von Smartphone-Tastaturen gerne automatisch hinzugefügt werden, führen für den Besucher so nicht zu einer «Ungültige Email-Adresse»-Fehlermeldung.

// '   Franz  ' wird zu 'Franz'
// '     ' wird zu ''
$name = trim($name);

Logik/Bereiche überprüfen

Leere Eingaben

Leere Eingaben sind für Pflichtfelder nicht erwünscht. Wir können überprüfen, ob die Variable einem leeren String '' entspricht oder die Länge 0 Zeichen beträgt.

if($name === '') {
    echo 'Bitte geben Sie einen Namen ein.';
}

if(strlen($email) < 5) {
    echo 'Bitte geben Sie eine Email ein.';
}

Feldspezifische-Überprüfung

Die logische Überprüfung variiert je nach Feld. Ein Geburtsjahr darf beispielsweise nie in der Zukunft liegen. Bei einem Mindestalter muss das eingegebene Datum maximal X Jahre in der Vergangenheit liegen. Nutze dazu einfache Vergleiche.

if($geburtsjahr > date('Y')) { // date('Y') = aktuelles Jahr (z. B. 2016)
    echo 'Geburtsjahr muss in der Vergangenheit liegen.';
}

if($geburtsjahr > (date('Y') - 18)) { // Geburtsjahr > 1998 -> Minderjährig
    echo 'Du musst volljährig sein! ಠ_ಠ';
}

(Bitte beachte, dass im letzten Beispiel natürlich das gesamte Geburtsdatum beachtet werden sollte, nicht nur das Jahr. Hier wurde das Beispiel vereinfacht.)

Format überprüfen

filter_var

Die Syntax ist wie folgt:

filter_var($variable, FILTER_KONSTANTE);

filter_var liefert bei einer ungültigen Eingabe einen Wert von false zurück. Andernfalls werden die Eingabe-Daten zurückgegeben. Es ist also wichtig einen typenstarken Vergleich mit false zu verwenden.

Als Filter-Konstante kann einer der folgenden Werte verwendet werden:

  • FILTER_VALIDATE_BOOLEAN

  • FILTER_VALIDATE_EMAIL

  • FILTER_VALIDATE_FLOAT

  • FILTER_VALIDATE_INT

  • FILTER_VALIDATE_IP

  • FILTER_VALIDATE_URL

Um zu überprüfen, ob eine gültige URL eingegeben wurde, könnte also folgender Code verwendet werden:

if(filter_var($url, FILTER_VALIDATE_URL) === false) {
    echo 'URL ist ungültig!';
} else {
    echo 'URL ist gültig!';
}

Bitte beachte, dass FILTER_VALIDATE_EMAIL bei Eingaben mit Umlauten false zurück gibt. Eine Email mit Umlauten ist jedoch theoretisch gültig (kontakt@höhenluft.ch). Die Überprüfung von Email-Adressen ist ohnehin ein heikles Thema. Am besten wird nur überprüft, ob das @-Symbol vorhanden ist. Alle anderen Regeln könnten sonst ungewöhnliche aber dennoch gültige Email-Adressen als ungültig erkennen.

Reguläre Ausdrücke

Formate, die mit filter_var nicht überprüft werden können, lassen sich mit regulären Ausdrücken validieren.

Mit der Funktion preg_match und dem regulären Ausdruck /^\d{2}\.\d{2}\.\d{2,4}$/ lässt sich beispielsweise das Format eines Datums überprüfen.

$datum = '24.11.1990';

if(preg_match('/^\d{2}\.\d{2}\.\d{2,4}$/', $datum)) {
    echo 'Datum ist gültig!';
} else {
    echo 'Datum ist ungültig!';
}

Dieser Ausdruck würde auch das Datum 40.80.8000 zulassen, für eine grobe Überprüfung reicht er jedoch aus.

Eine genauere Überprüfung wurde folgender Ausdruck bringen.

^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)[0-9]{2}$

Wie Du siehst, wird es sehr schnell sehr komplex. Reguläre Ausdrücke sind daher ein Thema für sich und werden in diesem ÜK nur teilweise behandelt.

Aufgabe: Validierung (Einzelarbeit)

Alle Felder, ausser das für die Bemerkung, sind Pflichtfelder.

Für die Validierung der Email-Adresse überprüfen wir, ob es sich um eine gültige Email-Adresse handelt.

Für die Telefonnummer dürfen nur Zahlen, Leerzeichen und das + Symbol eingegeben werden. Alle anderen Eingaben sind ungültig.

Wenn keine Fehler vorhanden sind, gib einfach nur den String OK nach der Validierung der Daten aus.

Die folgenden Testfälle sollte dein Formular erfüllen:

Feld

Input

Fehlermeldung

Name

'' (leer)

Bitte geben Sie einen Namen ein.

Email

''

Bitte geben Sie eine Email ein.

Telefon

''

Bitte geben Sie eine Telefonnummer ein.

Anzahl Personen

''

Bitte geben Sie die Anzahl teilnehmender Personen ein.

Hotel

''

Bitte wählen Sie ein Hotel für die Übernachtung aus.

Email

'google.com'

Die Email-Adresse "google.com" ist ungültig.

Telefon

'phone'

Die Telefonnummer "phone" ist ungültig.

Anzahl Personen

'Acht'

Bitte geben Sie für die Anzahl Personen nur Zahlen ein.

Email

'test@google.com'

keine

Email

'info@cern.ch '

keine

Telefon

'+41 260 30 39'

keine

Name

'Peter'

keine

Anzahl Personen

'5'

keine

Bemerkung

''

keine

Speichere alle gefundenen Fehler in ein$errors Array.

Sofern ein Fehler gefunden wurde, soll in der form.view.php eine Liste sämtlicher angezeigt werden:

<ul>
    <li>Fehler #1</li>
    <li>Fehler #2</li>
    ...
</ul>

Falls kein Fehler gefunden wurde, wird die neue View success.view.php geladen.

Aufgabe: Usability (Einzelarbeit)

Damit der Benutzer bei einem Fehler nicht wieder alle Daten einfüllen muss. Fülle die eingetragenen Felder wieder in das Formular ab.

Hier ein Beispiel dazu:

<input type="text" id="name" name="name" value="<?= $name ?? '' ?>">
Previous03 Verarbeiten von FormulardatenNext02 JavaScript Theorie

Last updated 3 years ago

Was this helpful?

PHP bietet zur Überprüfung von einigen Formaten die Funktion an.

Siehe auch

Tool zum Testen von Ausdrücken:

filter_var
PHP: Reguläre Ausdrücke auf wikibooks.org
PHP Live Regex