|

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.
<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
<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
<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.
|
 |