Haupt-Reiter

U11: PHP-Formularauswertung

HTML-Formulare können ein HTTP-Request unter der im method-Attribut des Formulars festgelegten Methode erzeugen. Dies kann zum Beispiel ein GET-Request oder ein POST-Request sein. Der Endpunkt des Request wird über das action-Attribut des Formulars bestimmt und gibt an wohin der Request gesendet wird.

Ablauf

Nehmen wir beispielsweise ein Projektverzeichnis mit folgender HTML-Datei an.

<form method=post action=form.php>
    <input type=email name=email>
    <input type=submit value=Senden>
</form>

Bei der Absendung werden die Inhalte des Formulars, hier die Texteingabe der E-Mail, als HTTP-POST-Request an die festgelegte Datei form.php übermittelt.

<?php
if (
    $_SERVER['REQUEST_METHOD'] === 'POST' &&
    isset($_POST['email'])
) {
    // …
} else {
    die('Ungültige Anfrage');
}

Die PHP-Datei wird aufgerufen und ausgeführt, hierbei wird zunächst überprüft, ob es sich tatsächlich um eine POST-Anfrage handelt und ob das Feld der E-Mail überhaupt in dem Anfrage-Körper enthalten ist. Ist das der Fall, kann das Script fortgesetzt werden, ist das hingegen nicht der Fall und mindestens eine der beiden Konditionen ist nicht wahr, so wird die Ausführung des Scripts sofort beendet und eine entsprechende Meldung wird als Antwort zurückgesendet.

Validierung

Sind die richtigen Inhalte mit der richtigen Übertragungsmethode eingegangen müssen aus Sicherheitsgründegen unbedingt auch die Inhalte der übertragenen Werte validiert werden.

Hierbei geht es darum zu prüfen, ob ein übertragenes Feld auch tatsächlich den Vorgaben seines Inhaltes entspricht. Das heißt, dass geprüft werden muss, ob ein Feld, dessen Inhalt eine Zahl sein soll, auch tatsächlich eine Zahl ist oder ob ein Eingabefeld für eine E-Mail-Adresse auch tatsächlich eine E-Mail-Adresse beinhaltet.

PHP bietet für diesen Zweck eine Reihe von Funktionen, die genau das tun: https://www.php.net/manual/en/ref.filter.php

$email = filter_input(
    INPUT_POST,
    'email',
    FILTER_VALIDATE_EMAIL
);

if ($email === false) {
    die('Ungültige E-Mail-Angabe');
}

Sanitization

Sind alle Werte geprüft und haben sich als valide herausgestellt müssen die Inhalte nun noch der sogenannten Sanitization unterzogen werden, um die Werte auch gefahrlos in der Weiterverarbeitung darstellen zu können. Hierbei werden alle potenziell gefährlichen Inhalte in den Werten entfernt oder so umgewandelt, dass diese bedenkenlos ausgegeben werden können. Das ist wichtig, da sichergestellt werden muss, dass zum Beispiel von Außen kein Fremdcode eingeschleust werden kann.

$email_sanitized = filter_var(
    $email,
    FILTER_SANITIZE_EMAIL
);

echo <<<HTML
    Deine E-Mail ist $email_sanitized
HTML;
Bewertung: 
5
Durchschnitt: 5 (1 Stimme)