Was, wenn jemand Unsinn eintippt?
Validierung heißt, eine Eingabe zu prüfen, bevor man mit ihr arbeitet. Ein Formular nimmt Text entgegen, und Text kann alles sein.
In einem Onlineshop muss ein Preis eine Zahl sein und eine E-Mail-Adresse ein @ haben. Heute baust du solche Prüfungen selbst.
Am Ende dieser Lektion
Notiz
Ich kann prüfen, ob das, was jemand in ein Formular tippt, brauchbar ist.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Eingabe | das, was jemand in ein Feld tippt |
| Validierung | das Prüfen einer Eingabe auf Brauchbarkeit |
| Formular | eine Seite mit Feldern zum Ausfüllen |
| Fehlermeldung | ein Satz, der sagt, was falsch ist |
| Client | hier: der Browser der Person |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Warum reicht es nicht, dem Feld zu vertrauen?
Jede Eingabe kann leer, zu lang oder vom falschen Typ sein. Manche tippen sich nur vertan, andere probieren absichtlich Unsinn aus.
Ein Programm, das eine Eingabe ungeprüft nutzt, stürzt ab oder speichert Müll. Eine Prüfung sagt der Person früh, was zu ändern ist.
Beispiel: vier Arten der Prüfung
| Prüfung | Frage | Beispiel im Kiosk-Formular |
|---|---|---|
| Pflicht | Ist etwas eingetippt? | Der Name darf nicht leer sein |
| Länge | Ist es nicht zu lang? | Der Name hat höchstens 30 Zeichen |
| Art | Ist es vom richtigen Typ? | Der Preis ist eine ganze Zahl |
| Bereich | Liegt es in sinnvollen Grenzen? | Der Preis liegt über 0 und unter 10 000 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Was prüft der Browser von selbst?
HTML kann einfache Prüfungen schon im Formular. required verlangt eine Eingabe. type="number" nimmt nur Zahlen. min und max setzen Grenzen, maxlength die Länge.
Der Browser zeigt die Fehlermeldung, noch bevor etwas gesendet wird. Das spart eine Anfrage und ist freundlich.
Ein Formular mit Prüfungen
<form>
<label>Name <input name="name" required maxlength="30"></label>
<label>Preis in Cent <input name="preis" type="number" min="1" max="10000" required></label>
<button>Anlegen</button>
</form>Ein häufiger Fehler
Warnung
Viele denken, die Prüfung im Browser genüge. Das stimmt nicht. Wer den Browser umgeht, schickt trotzdem, was er will, zum Beispiel mit curl. Prüfe darum immer auch auf dem Server. Die Prüfung im Browser ist nur Komfort.
Bevor du anfängst
Notiz
Drück oben in der Leiste auf Lab starten und warte, bis die Maschine läuft. Die Runs brauchen die Tabelle produkte aus der ersten Lektion. Hier schickst du absichtlich schlechte Eingaben an die API und liest, wie sie antwortet.
Ein Produkt ohne Name senden
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"preis_in_cent":100}' http://api:3000/produkteHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Produkt mit einem Wort als Preis senden
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"name":"Tee","preis_in_cent":"billig"}' http://api:3000/produkteHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einen Namen senden, den es schon gibt
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"name":"Brezel","preis_in_cent":120}' http://api:3000/produkteHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Warum antwortet die API mit 400 und 409?
Die Datenbank hinter der API kennt Regeln: Der Name ist Pflicht, der Preis eine ganze Zahl, der Name nur einmal erlaubt. Verstößt eine Anfrage dagegen, lehnt sie die Daten ab.
Die API sagt dann 400, wenn die Anfrage nicht passt, und 409, wenn sie mit vorhandenen Daten kollidiert. Beide gehören zur Gruppe 4: Der Fehler liegt beim Client.
Ein gültiges Produkt senden
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"name":"Tee","preis_in_cent":180}' http://api:3000/produkteHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie schreibt man eine eigene Prüfung?
Eine Prüfung ist eine Funktion. Sie bekommt die Eingabe und gibt eine Liste der Fehler zurück. Ist die Liste leer, ist alles in Ordnung.
Bei jeder Prüfung hängst du einen Satz an, wenn sie fehlschlägt. So sieht die Person alle Fehler auf einmal und nicht nur den ersten.
Einen Preis prüfen
def preis_fehler(text):
fehler = []
if not text.isdigit():
fehler.append("Der Preis muss eine ganze Zahl sein.")
return fehler
print(preis_fehler("120"))
print(preis_fehler("1,5"))
# Probiere "" und "abc" aus und drück auf Ausführen.Weiterführend: eine Prüfung für die E-Mail-Adresse
Schreib in Python eine Funktion mail_fehler(adresse). Sie soll einen Fehler melden, wenn kein @ in der Adresse steht oder wenn nach dem @ kein Punkt kommt.
Teste sie mit „[email protected]“ und „ben-schule.de“. Warum kann eine solche Prüfung nie beweisen, dass die Adresse wirklich existiert?