Werbung einblenden Werbung ausblenden


Home / Tutorials / PHP Handbuch / Html Formulare mit PHP auswerten


Html Formulare mit PHP auswerten
Der radio button
Versteckte Formular-Elemente (hidden)
Schaltflächen (button)
Feld für Dateiupload

Html Formulare mit PHP auswerten

Die meisten PHP Skripte werden von HTML Formularen angeschoben. Gastebücher, Autobörsen, Immobilienbörsen,Chats, Foren, Gästebücher, Auktionen, Tauschbörsen etc. etc. erhalten ihren Input über HTML Formulare. Eigentlich hat das erstmal wenig mit PHP zu tun, sondern ist ein Bestandteil von HTML. Eine kurze Wiederholung anhand eines Beispiels.

<html><head><title>Alle Formularelemente auf einen Blick</title></head>
<body>
<H3>Alle Formularelemente auf einen Blick</H3>
<form action name=mein_php_script.php method=get>
<input type=hidden name=modul value=eins>
Name <input type=texte value="Geben Sie hier Ihren Namen ein"><br>
<hr>
Wie sind Sie auf diese Website gestossen <br>
Tip von Freunden <input type=checkbox name=wie[] value=Freund> <br>
über eine Suchmaschine <input type=checkbox name=wie[] value=Suchmaschine> <br>
durch Zufall <input type=checkbox name=wie[] value=Zufall> <br>
<hr>
Sie sind männlich <input type=checkbox name=geschlecht value=m> weiblich <input type=checkbox name=geschlecht value=weiblich> <br>
<hr>
Wie gefällt Ihnen diese Website?
<select name=gusto><option value=hervorragend>Ich bin begeistert
<option value="ganz toll">Ich krieg mich kaum noch ein
<option value=genial>Das Beste dieser Art überhaupt
</select>
<hr>
Ich möchte über Änderungen dieser Website informiert werden <input type=checkbox name=informieren> <br>
<hr>
Kommentar<br>
<textarea rows=5 cols=40 name=beitrag>Sie haben hier die Möglichkeit, uns Verbessserungsvorschläge zu machen</textarea>
<hr>
Möchten Sie uns auch ein Bild schicken ?<br>
<input type=file name=bild>
<hr>
<input type=button value="passiert nix"> <input type=reset value="Formulardaten löschen"><input type=submit value=abschicken>
</form>
</body>
</html>

Der obernstehende HTML-Quelltext produziert im Broser folgendes Formular: zeigen
Das ist ein Formular, das alle Formularelemente zeigt. Drückt man auf den Knopf abschicken, baut der Browser den Query_String zusammen. Ein genaues Verständnis, wie dieser Query_String aufgebaut ist, ist für die Internetprogrammierung, völlig unabhängig von der gewählten Technologie, Active Server Pages, CGI Programmierung, Java Servlets, Cold Fusion etc. unabdingbar. In diesem Formular taucht das Element Checkbox zweimal auf. Einmal taucht es in der Varianten auf, dass es nur eine Checkbox mit demselben Namen gibt.

<input type=checkbox name=informieren>

Clickt man diese Box an, entsteht sowas informieren=on
bzw. informieren=
wenn diese Box nicht angeklickt wird. Zweitens taucht noch die Variante auf, dass es eine Checkbox mit demselben Namen mehrere Male gibt.

<input type=checkbox name=wie value=Freund> <input type=checkbox name=wie value=Suchmaschine> <input type=checkbox name=wie value=Zufall>

Clickt man mehrere davon an, entsteht ein Query_String der so aussieht.
wie=Freund&wie=Suchmaschine&wie=Zufall
Bei dieser zweiten Variante haben wir ein Problem insofern, als die Art und Weise, wie der Query_String von dem verarbeitenden Program ausgelesen wird, modifiziert werden muss. Wir sehen, dass an der entsprechenden Stelle im HTML Formular eine eckige Klammer ist. Dadurch ist PHP in der Lage zu erkennen, dass es sich um einen Array handelt. Auf die entsprechenden Werte kann also nach dem Schema $wie[0], $wie[1] etc. zugegriffen werden.

Der radio button

<input type=checkbox name=geschlecht value=m> <input type=checkbox name=geschlecht value=weiblich>

Der radio button hat von der Natur der Sache her einen identischen Namen, aber es kann von einer "radio button Familie" auch nur ein Element angeclickt werden. Bei radio buttons müssen aber alle Elemente den gleichen Namen haben, da der Browser sonst keine Chance hat, sie als zusammengehörend zu erkennen. Auch beim radio button ist man im übrigen nicht gezwungen, einen Wert anzugeben, allerdings ist er dann sinnlos, weil dann, egal welcher Wert angeclickt wurde, immer das gleiche übergeben wird, nämlich nichts. Da die anderen Formularelemente eigentlich selbsterklärend sind, bleiben nur noch drei übrig, zu denen es etwas zu sagen gibt.

Versteckte Formular-Elemente (hidden)

<input type=hidden name=modul value=eins>

Dieses Formularelement wird versteckt übergeben, das heisst, der user soll es nicht beeinflussen. (Betonung liegt auf soll. Er kann natürlich die HTML Seite abspeichern und dann den Wert modifizieren.) Mit diesem Formularelement kann man Variablen übergeben, die den User identifizieren, was z.B. bei Shops wichtig ist, oder das Programm steuern, z.B. wenn ein Skript mehrere Funktionen hat und entschieden werden muss, welche abgearbeitet werden soll. Sehr schnell erklärt ist dieses Formularelement

Schaltflächen (button)

<input type=button value="passiert nix">

Was macht dieses Formularelement ? Nix macht es. Es hat nur eine einzige Funktionalität, die darin besteht, dass man die JavaScript event handler an dieses Element binden kann. Komplexer ist dann schon diese Element

Feld für Dateiupload

<input type=file name=bild>

Dieses Formularelement wurde erst sehr viel später eingeführt. Mit diesem Element wird es möglich, jede x-beliebige Datei auf den Fremdrechner upzuloaden, was z.B. bei Anzeigenmärkten die Darstellung der Waren mit Bild ermöglicht. Wie man es einsetzt und Details siehe Bildupload aus dem Browser. Machen wir uns kurz die Struktur des Query_Strings klar, wenn dieses Formular angeschoben wird. Klar ist, dass wir nur die Struktur beschreiben, da sich das konkrete Aussehen ja von Fall zu Fall ändert. Er könnte aber beispielsweise so aussehen.

?modul=eins&wie=Freund&wie=Suchmaschine&geschlecht=m&gusto=ganz+toll&beitrag
=Wahnsinn%2C+hier+geht+ja+voll+die%0D%0APost+ab


Wer das nicht glaubt, der kann ihn vom Browser produzieren lassen. Man schnappe sich das Formular, werfe es in eine Datei, speichere es unter ein_geiler_Name.htm und rufe es im Browser auf. Dann trage man was ein und drücke auf abschicken. In der Adressleiste des Browsers erscheint er dann in seiner ganzen Pracht. Der Query_String ist all das nach dem Fragezeichen. Vor dem Fragezeichen steht normalerweise der Url, also sowas wie http://www.eine_domain.de. Wir erkennen ein Muster, das so aussieht,


Name_des_ersten_Formularelementes
=Wert_des_ersten_Formularelementes&Name_des_zweiten_ Formularelementes
=Wert_des_zweiten_Formularelementes etc. etc.


Wir erhalten also Name/Werte Paare, die jeweils durch das kaufmännische & Zeichen getrennt sind. Wer mit PHP programmiert, braucht sich keine weiteren Gedanken mehr machen, wie die so übergebenen Usereingaben dem Skript zur Verfügung gestellt werden. In PHP kann man die Usereingaben einfach abrufen, in dem man den Teil rechts des Gleichheitszeichen aufruft ($Name_des_erste_Formularelementes etc. etc.) Hier nur kurz die Besonderheiten, die es zu beachten gilt. Wir haben zweimal den Namen wie, nämlich name=wie value=Freund und name=wie value=Suchmaschine. Will man beide Werte retten, muss man sich was einfallen lassen. Unter PHP sind dann im HTML Formular die Namen entsprechend als Array zu kennzeichnen.

<input type=checkbox name=wie[] value=Freund>
<input type=checkbox name=wie[] value=Suchmaschine>

Die Werte werden dann an einen Array übegeben und können so auch wieder herausgefischt werden. ($wie[0] und $wie[1] wenn beide Boxen angecklickt wurden). Weiter fällt auf, dass überall dort, wo bei den Eingaben in die Formularfelder ein Leerzeichen steht, der Browser dieses Leerzeichen durch ein + Zeichen ersetzt. Dieses muss man dann hinterher, bei der Auswertung mit Perl, wieder eliminieren. Sonderzeichen, wie ä,ö,ü,ß,!,§ etc. etc. werden durch Hexadezimalzeichen ersetzt. Auch das muss wieder rückgängig gemacht werden. Den Aufbau des Query_Strings sollte man verinnerlichen, weil es in der Internetprogrammierung häufig vorkommt, dass dieser nicht vom Browser produziert wird, sondern "mit der Hand" geschrieben werden muss, etwa weil schon beim Aufruf eines PHP-Sriptes bestimmte Variablen, die den Skript steuern, mit übergeben werden müssen.

vorhergehendes Kapitel