Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Eingaben in Formularen prüfen (Validierung)

Nach dieser Lektion: Ich kann prüfen, ob das, was jemand in ein Formular tippt, brauchbar ist.

Lektion, 45 Min.4 BefehlePostgreSQL-und-PostgREST-Lab: eine Datenbank und eine REST-API im Browser

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

BegriffWas er bedeutet
Eingabedas, was jemand in ein Feld tippt
Validierungdas Prüfen einer Eingabe auf Brauchbarkeit
Formulareine Seite mit Feldern zum Ausfüllen
Fehlermeldungein Satz, der sagt, was falsch ist
Clienthier: 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üfungFrageBeispiel im Kiosk-Formular
PflichtIst etwas eingetippt?Der Name darf nicht leer sein
LängeIst es nicht zu lang?Der Name hat höchstens 30 Zeichen
ArtIst es vom richtigen Typ?Der Preis ist eine ganze Zahl
BereichLiegt 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

Code: web
<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

Befehl
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"preis_in_cent":100}' http://api:3000/produkte

Hier 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

Befehl
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/produkte

Hier 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

Befehl
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/produkte

Hier 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

Befehl
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/produkte

Hier 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

Code: python
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?

Über dieses Lab und seinen Quellcode: PostgreSQL-und-PostgREST-Lab: eine Datenbank und eine REST-API im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.