03 Verarbeiten von Formulardaten
GET vs. POST
Daten können via GET
- oder POST
-Methode an einen Server versendet werden.
GET
Daten, die via GET
-Methode gesendet werden, werden in der URL als «Query-String» abgebildet. Dazu wird der URL ein ?
angehängt, gefolgt von variablenname=variablenwert
. Mehrere Parameter werden durch ein &
voneinander getrennt.
Die GET
-Methode verwenden wir, wenn wir von einem Server spezifische Daten beziehen (= engl. to get
) möchten. So können wir zum Beispiel einem Script mitteilen, welche Datensatz-ID wir laden möchten:
POST
Daten, die via POST
-Methode gesendet werden, werden im Body des HTTP-Requests eingefügt. Die Daten werden dort im selben Format wie beim GET
-Request eingefügt, sind jedoch diesmal kein Bestandteil der URL.
Dies ist besonders beim Versenden von vertraulichen Daten wie Passwörtern wichtig zu unterscheiden: Via GET übermittelte Daten sind Bestandteil der URL und werden somit auch in Logfiles oder Besucherstatistiken geloggt. Werden die Daten via POST an den Server gesendet, bleibt die URL neutral und die Daten werden separat übermittelt.
Die POST
-Methode verwenden wir, wenn wir Daten an einen Server senden (= engl. to post
) möchten. So können wir einem Script zum Beispiel den Benutzername und das Passwort für ein Login zusenden.
PUT, PATCH, DELETE, OPTIONS, HEAD, TRACE, CONNECT
Das HTTP-Protokoll definiert noch weitere Methoden als nur GET
und POST
. Diese funktionieren grundlegend alle wie die POST
-Methode, lediglich deren Bedeutung/Anwendungszweck ist anders.
Gemäss HTML-Spezifikation werden nur die GET
- und POST
-Methoden für <form>
-Elemente erlaubt, daher können die anderen Methoden in einem Webbrowser nicht genutzt werden.
Daten empfangen
Um Daten aus einem HTTP-Request in PHP zu empfangen, können die Superglobals $_GET
und $_POST
verwendet werden. «Superglobals» sind von PHP vordefinierte Variablen, die immer und überall verfügbar sind (also auch in Funktionen oder Klassen).
Das «Decoding» der Daten übernimmt PHP automatisch (in diesem Fall +
durch Leerzeichen
ersetzen).
Handelt es sich um einen POST
-Request?
POST
-Request?Unser Code zur Formularverarbeitung soll nur dann ausgeführt werden, wenn ein Formular abgesendet wurde, bzw. ein POST
-Request an unser Script gesendet wurde:
Um zu überprüfen, ob es sich beim Request um einen POST
-Request handelt, können wir auf die $_SERVER
Superglobale zurückgreifen. $_SERVER
ist ein Array mit zahlreichen Informationen zu userem Script, unserem Server und auch dem eingehenden HTTP-Request.
Für diese Abfrage relevant ist der REQUEST_METHOD
-Schlüssel. Enthält dieser den Wert POST
werden Daten (z. B. über ein Formular) an den Server gesendet.
Aufgabe: Verarbeitung (Einzelarbeit)
Erstelle eine neue Methode validate()
im Controller FormController.php
und schaue via Routes-Eintrag, dass diese bei der URI /validate
aufgerufen wird.
Überprüfe nun in der neuen Methode, ob POST-Daten gesendet wurden. Falls ja: Gib diese mit einem var_dump
-Konstrukt aus. Falls nein: Leite den Besucher zurück zum Formular.
Aufgabe: Datenzugriff (Einzelarbeit)
Betrachte nun das oben ausgegebene assoziative Array und überlege dir, wie du den einzelnen Wert name
mit einem echo
-Konstrukt ausgeben kannst.
Last updated
Was this helpful?