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.
Der Null Coalesce Operator
bietet uns eine einfache Möglichkeit, obenstehenden Code zu vereinfachen.
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.
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.
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.
(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
filter_var
Die Syntax ist wie folgt:
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:
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.
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.
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.
''
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.
'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.
'test@google.com'
keine
'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:
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:
Last updated
Was this helpful?