PHP Formulare

Einführung in PHP-Formulare

In diesem Abschnitt lernst du, wie HTML-Formulare funktionieren und wie man Formulardaten in PHP verarbeitet. Um ein PHP Formular zu erstellen, verwendet man den

Tag:

Der

-Tag hat zwei wichtige Attribute:

  • action: gibt die URL an, die die Formularübermittlung verarbeitet. In diesem Beispiel wird formular.php das PHP Formular verarbeiten.

  • method: gibt die HTTP-Methode für das Absenden des PHP Formulars an. Die am häufigsten verwendeten PHP Formular-Methoden sind POST und GET.

    PHP Programmierer buchen!

    In diesem Beispiel ist die PHP Formular-Methode post.


    Für die PHP Formular-Methode spielt die Groß- und Kleinschreibung keine Rolle. Du kannst also entweder post oder POST verwenden.

    Typischerweise hat ein PHP Formular ein oder mehrere Eingabeelemente wie Text, Passwort, Kontrollkästchen, Optionsfeld, Auswahl, Datei-Upload usw. Die Eingabeelemente werden oft als Formularfelder bezeichnet. Ein Eingabeelement hat die folgenden wichtigen Attribute: name, type und value. Das Attribut name wird für den Zugriff auf den Wert in PHP verwendet.

    HTTP-POST-Methode

    Wenn ein PHP Formular die POST-Methode verwendet, nimmt der Webbrowser die Formulardaten in den Body der HTTP-Anfrage auf. Nach dem Absenden des PHP Formulars kann man in PHP über das assoziative Array $_POST auf die Formulardaten zugreifen.

    Wenn ein PHP Formular zum Beispiel ein Eingabeelement mit dem Namen email hat, kannst du in PHP über $_POST[’email’] auf den Wert email zugreifen.

    Wenn das PHP Formular keine E-Mail-Eingabe hat, wird $_POST das Element mit dem Schlüssel „email“ nicht enthalten.

    Um zu prüfen, ob die Formulardaten die E-Mail enthalten, verwende die Funktion isset() wie folgt:

    Das folgende Beispiel zeigt ein HTML-Formular mit einem E-Mail-Eingabeelement:

    In der Datei formular.php kannst du wie folgt auf den Wert email zugreifen:

    if (isset($_POST[’email’])) {
    var_dump($_POST[’email’]);
    }

    HTTP GET-Methode

    Wenn du ein PHP Formular mit der GET-Methode absendest, kannst du in PHP über das assoziative Array $_GET auf die Formulardaten zugreifen.

    Anders als bei der POST-Methode werden bei der GET-Methode die Formulardaten an die URL angehängt, die das Formular verarbeitet. Angenommen, die URL, die das Formular verarbeitet, lautet http://localhost/formular.php. Wenn du die E-Mail als hello@php.net eingibst und ein Formular absendest, wirst du sehen, dass der email-Wert wie folgt an die URL angehängt wird:

    http://localhost/formular.php?email=hello%40php.net

    In PHP kannst du auch die Funktion isset() verwenden, um zu prüfen, ob die Formulardaten die E-Mail enthalten:

    Beachte, dass das @ in der URL als %40 kodiert ist.

    Falls das Formular mehrere Eingabeelemente hat, hängt der Webbrowser die Formulareingaben im folgenden Format an die URL an:

    http://localhost/formular.php?name1=value1&name2=value2&name3=value3

    Das folgende Beispiel zeigt das gleiche Formular mit E-Mail-Eingabe. Allerdings verwendet das PHP Formular stattdessen die GET-Methode:

    Und so sieht die formular.php-Datei aus:

    Beachte, dass die beiden Arrays $_POST und $_GET superglobale Variablen sind. Das bedeutet, dass du überall im Skript auf sie zugreifen kannst.

    HTTP GET oder POST

    Im Allgemeinen solltest du die GET-Methode verwenden, wenn das Formular nur Daten vom Server abruft. Zum Beispiel sollte ein Suchformular, mit dem Benutzer nach Informationen suchen können, die GET-Methode verwenden.

    Wenn du jedoch ein PHP Formular hast, das eine Änderung auf dem Server bewirkt, solltest du die POST-Methode verwenden. Zum Beispiel sollte ein PHP Formular, das es Benutzern ermöglicht, einen Newsletter zu abonnieren, die POST-Methode verwenden.

    Beispiel für ein PHP-Formular

    Die folgende index.php-Datei enthält ein Formular, mit dem sich Benutzer für einen Newsletter anmelden können:

    Das PHP Formular verwendet die POST-Methode und sendet die Daten an die Seite anmeldung.php. Es hat zwei Eingabeelemente mit den Typen text und email.

    Bevor das PHP Formular an den Server gesendet wird, prüft der Webbrowser, ob alle erforderlichen Felder im richtigen Format ausgefüllt sind. Dies wird als clientseitige PHP Formularvalidierung bezeichnet. Um Daten auf der Client-Seite zu validieren, kannst du entweder HTML5-Formularvalidierung oder JavaScript-Validierung verwenden. Allerdings solltest du dich aus Sicherheitsgründen niemals auf die client-seitige Validierung verlassen.

    Der Zweck der clientseitigen Validierung ist es, legitimen Benutzern zu helfen, Daten im richtigen Format einzugeben. Sie verhindert jedoch nicht, dass böswillige Benutzer falsche Daten eingeben, die der Anwendung schaden könnten. Daher ist es zwingend erforderlich, die serverseitige Validierung zu implementieren.

    Im Folgenden wird der Code der Datei anmeldung.php gezeigt:

    Und so funktioniert es:

    Zuerst prüfst du mit der Funktion isset(), ob der Name und die E-Mail im Array $_POST enthalten sind.

    Dann wird eine Dankesnachricht angezeigt.


    Wenn du zum Beispiel den Namen Max und die E-Mail-Adresse max.mustermann@beispiel.de eingibst, erscheint die folgende Meldung auf der Seite anmeldung.php:

    Danke für deine Anmeldung, Max.{br}”;
    Wir haben eine E-Mail an max.mustermann@beispiel.de geschickt.”;

    Schütze deinen PHP-Code mit Escape-Funktionen

    Die Seite anmeldung.php zeigt die PHP Formulardaten direkt an. Wenn böswillige Hacker absichtlich falsche Daten eingeben, wird die Seite nicht richtig funktionieren.

    Wenn zum Beispiel der folgende JavaScript-Code in das Namensfeld eingegeben und das Formular abgeschickt wird:

    … wirst du sehen, dass die Seite eine Warnung mit dem Text „Du wurdest gehackt!“ anzeigt.

    Nun stell dir vor, dass das Skript nicht nur eine Warnung anzeigt, sondern bösartigen Code von einem anderen Server in den Webbrowser des Benutzers lädt. Da wäre das Risiko schon höher. Diese Art von Angriff wird Cross-Site-Scripting (XSS)-Angriff genannt.

    Deshalb solltest du, bevor du Benutzereingaben auf einer Webseite anzeigst, die Daten immer mit einem Escape versehen. Dazu kannst du die Funktion benutzen: