Formularauswertung mit PHP Teil 1

Zu häufigen Aufgaben von PHP gehört die Auswertung von Formulardaten, sei es in Kontaktformularen, in Shopsystemen usw. usf. Beginnen wir damit, wie wir überhaupt Daten aus Formuaren in PHP-Variablen transferieren können.

Dazu erstellen wir uns erstmal ein einfaches html-Formular:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html>

<
head>
    <
title>Titel</title>

    <
meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
        
</
head>

<
body>

<
form action="auswertung.php" method="post">
Name: <input name="name" type="text"/><br />
<
input type="submit" value="ok"/>

</
form>

</
body>
</
html>

Wir haben jetzt ein wirklich ganz einfaches Formuar mit lediglich einem Input-Feld und einem submit-Button zum Absenden des Formulars.

Mit der Anweisung action="auswertung.php" rufen wir ein PHP-Script auf, an das wir die Daten übergeben.

Nun brauchen wir noch das PHP-Script. Wir beginnen damit zu überprüfen, ob überhaupt etwas in das Formluarfeld eingegeben wurde.



<?php

$name
=$_POST["name"];

if(
$name=="")
{
    echo 
"Fehler";
}
else
{
    echo 
$name;
}

?>

Wir sehen die Anweisung $_POST['name']. Nun wissen wir, was die html-Anweisung method="post" bedeutet. Sie gibt an, auf welche Weise Formulardaten übergeben werden sollen. Ich werde gleich nochmal darauf zurückkommen. Schauen wir uns zunächst das Ergebnis unserer beiden Mini-Scripte an:

Die Ausgabe, wenn wir etwas eingeben:

PHP-Lehrgang Formulare Programm 1

Die Ausgabe, wenn wir das Feld name leer absenden:

PHP-Lehrgang Formulare Programm 1

Wir sehen, dass der Benutzer uns nun nicht einfach ein leeres Formularfeld unterjubeln kann.

GET und POST

Wenn wir zum Versenden der Formulardaten method="post" wählen, überträgt der Web-Browser die Formulardaten mit einer speziellen POST-Anfrage an den Web-Server (post = "verschicken"). Der Web-Server stellt die Daten dem CGI-Programm ber den Standardeingabekanal zur Verfgung.

Das Pendant dazu ist die Methode get. Dabei werden die Formulardaten an die Aufrufadresse angehängt. Wir stellen unsere beiden Programme kurz um und schauen, was passiert:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html>

<
head>
    <
title>Titel</title>

    <
meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
        
</
head>

<
body>

<
form action="auswertung.php" method="get">
Name: <input name="name" type="text"/><br />
<
input type="submit" value="ok"/>

</
form>

</
body>
</
html>

Nun ändern wir noch unser PHP-Script:



<?php

$name
=$_GET["name"];

if(
$name=="")
{
    echo 
"Fehler";
}
else
{
    echo 
$name;
}

?>

Wenn wir uns nach Aufrufen des html-Scripts und nach dessen Absenden die Adressleiste im Browser anschauen, sehen wir, dass der Parameter name tatsächlich angehängt ist.

PHP-Lehrgang Formulare Programm 1

Folgendes gilt es bei Verwendung der GET-Methode zu bedenken:

  1. Die Länge der zu übegebeben Parameter iat auf ca. 2.000 Zeichen begrenzt.
  2. Die Daten sind nun öffentlich sichtbar, was bei sensiblen Daten gefährlich sein kann.

Trotzdem kann die Verwendung der GET-Methode durchaus Sinn machen, z.B. zur Verwendung der Programmsteuerung.

Doch nun zurück zu unserem Formular. Wir haben also die Möglichkeit zu überprüfen, ob der Benutzer uns ein leeres Formular senden wollte. Trotzdem könnte uns der Benutzer überlisten. Wenn wir nämlich in das Formular ein Leerzeichen eingeben, so erhalten wir folgende Ausgabe:

PHP-Lehrgang Formulare Programm 1 leeres Ergebnis

Was können wir nun tun? Wir können nicht einfach die Abfrage ändern auf if($name)==" ", denn dann fehlt wiederum die Abfrage nach einem Leerfeld. Wir könnten theoretisch die Abfrage ergänzen auf if($name=="" AND $name==" "). Das würde nur so lange funktionieren, bis der Benutzer 2 Leerzeichen eingibt.

Die effektivste Methode wäre daher, vor der Abfrage alle Leerzeichen zu entfernen. Dazu stellt PHP die wunderschöne Funktion str_replace() zur Verfügung. Ergänzen wir unser PHP-Script:



<?php

$name
=str_replace(" ","",$_POST["name"]);

if(
$name=="")
{
    echo 
"Fehler";
}
else
{
    echo 
$name;
}


?>

Nun können wir am Beginn der Eingabe oder auch zwischendurch Leerzeichen eingeben, die alle entfernt werden. Allerdings ist genau das ein neues Problem:

PHP-Lehrgang Formulare Programm 1 Leerzeichen entfernen

Wir sehen, dass nun auch Leerzeichen zwischen Doppelnamen oder bei Eingabe von Vor- und Nachname entfernt werden. Unter Umständen sind nun die Daten für weitere Verwendung unbrauchbar und müssten erst aufwendig korrigiert werden. Um dies zu umgehen, speichern wir die zu kontrollierenden Daten in einer neuen Variablen, bevor wir sie umwandeln:


<?php

$name
=$_POST["name"];
$name_korrektur=str_replace(" ","",$_POST["name"]);

if(
$name_korrektur=="")
{
    echo 
"Fehler";
}
else
{
    echo 
$name;
}

?>

Nun erhalten wir den ursprüglichen Zustand der Daten und prüfen mit den Kontrolldaten.

Warum ich so ausführlich darauf eingehe? Weil wir bei Erstellung solcher Prüfroutinen immer im Hinterkopf behalten müssen, was erstens der Benutzer so alles anstellen kann und zweitens was passiert, wenn wir Daten aufbereiten.


« zurück