Dynamische Webseiten mit PHP

Formulare

Formulare in HTML

Eingabe

Interaktive Webseiten machen nur Sinn, wenn es für den Nutzer möglich ist Eingaben zu machen. Dafür stehen in HTML Formulare zur Verfügung. Hier ein Beispiel für einen Login-Dialog:

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
Kennung: <input type="text" name="kennung" size="20"><br>
Passwort: <input type="password" name="passwort" size="20"><br>
<input type="submit" value="Einloggen">
</form>

Im öffnenden <form>-Tag wird bestimmt was mit den Daten geschehen soll. Und zwar
a) Wohin sie verschickt werden bzw. welche Instanz sie auswerten soll und
b) wie die Daten verschickt werden sollen.


Methode

Die Methode bestimmt auf welche Weise die Daten verschickt werden sollen.

methodBemerkung
POST Ähnlich wie bei HTML bestehen auch die HTTP-Pakete aus einen Header- und einem Body-Teil. Bei Verwendung der Methode POST werden die Daten des Formulars innerhalb des Body-Teils übermittelt und können daher beliebig lang werden. Sie sind dabei für den normalen WWW-Benutzer nicht sichtbar. Das ist wichtig bei längeren Eingaben oder sicherheitsrelevanten Übermittlungen.
GET Die Methode GET hängt die Daten des Formulars an die URL an (also im Head-Teil des HTTP-Pakets). Das heisst, sie sind in der Browserzeile sichtbar. Ein weiterer Nachteil ist, dass eine URL nicht länger als 256 Zeichen lang werden sollte. Daher ist diese Methode nur für die Übermittlungen kleinerer Datenmengen sinnvoll.

Die Syntax der Übermittlung ist hier:
URL?variablenname1=wert1&variablenname2=wert2&...

z.B.:

http://www.firma.com?name=Hanswurst&passwort=nichtsehrgeheim

Der erste Trenner der auf die Top Level Domain (z.B. ".com") folgt ist immer ein ?. Alle weiteren Trenner sind &. Die Einträge bestehen aus Variablennamen/Wert-Paaren mit einem = dazwischen. Die Variablennamen, sie die im HTML-Formular mit name="..." angegebenen.


Übernahme der Variablen

Seit der Version 4.3.x von PHP wird aus Sicherheitsgründen empfohlen die PHP-Variable $register_globals (in der php.ini) auf off zu setzen. Das erfordert, dass im Programm die übergebenen Variablen explizit eingelesen werden müssen

$kennung = $_GET['kennung'];
$passwort = $_GET['passwort'];

bzw.

$kennung = $_POST['kennung'];
$passwort = $_POST['passwort'];

Die vom Nutzer eingegebenen Daten stehen dann in den entsprechenden Variablen.


Aber wohin sollen die Daten nun verschickt werden?

a) an ein anderes PHP-Dokument das die Daten auswertet oder
b) an sich selbst.

a) Fremddatei
Es ist möglich sie an ein anderes Dokument zu schicken

action="auswertung.php"
Hier würde das Dokument auswertung.php die Daten verarbeiten.

b) Eigendatei
Es ist ebenfalls möglich das Dokument an sich selbst zu schicken.

action="<? echo $_SERVER[‘PHP_SELF‘]; ?>"

Die Variable $PHP_SELF zeigt immer auf die Datei in der sie steht. Durch echo wird sie in den HTML-Code geschrieben. So schickt das Formular die Daten an das eigene Dokument. Probleme kann es bei dieser Konstruktion geben, wenn der Nutzer die reload-Funktion seines Browsers betätigt. Die selben Daten werden dann erneut bearbeitet.


Beispiel1

<?
$kennung = $_POST['kennung'];
$passwort = $_POST['passwort'];
?>
<html lang="de">
<body>
lt;form action="<? echo $_SERVER[‘PHP_SELF‘]; ?>" method="post">
Kennung: <input type="text" name="kennung" size="20" value="<? echo $kennung; ?>"><br>
Passwort: <input type="password" name="passwort" size="20" value="<? echo $passwort; ?>"><br>
<input type="submit" value="Einloggen">
</form>
<?
echo "->".$kennung;
echo "->".$passwort;
?>
</body>
</html>