Formulare:
Hinweise zur Erstellung von Formular und Formularelementen, welches durch ein PHP-Script verarbeitet werden sollen. Ein Beispielformular mit allen möglichen Feldern. So werden die Usereingaben in Formularfeldern zu einer Seite übertragen, dass sie sauber ankommen.
Formularfelder
Grundsätzliches: zu HTML-Formularen und deren
Gestaltung durch CSS lesen Sie dort.
Bitte füllen Sie das Beispiel-Formular aus, damit wir in der Folge den
Empfang eines Formulars und die Ausgabe Ihrer Eingaben anschauen können.
Es folgen nun die Hinweise zu Formularelementen und Attributen, im Bezug zur Auswertung mit PHP.
Action
action="zieldatei"
Im Formular wird die Datei angegeben, welche durch die action geöffnet
wird, der die Variablen übergeben werden und die die Abfrage vornehmen wird:
<form action="formular_post.php" method="post" name="formular">
GET versus POST
methode="POST"
Die Userinputs werden als Variablen in einem Assoziativen Array übermittelt: $_POST[Feldname]
Die im Form-Tag bestimmte Methode 'POST' gilt als die sicherere Variante,
und sie taugt gut zum Übertragen grösserer Userinputs.
Wenige, kurze Felder kann man auch mit der GET-Methode übermitteln, der
Array heisst dann: $_GET[Feldname]. Aber wenn die Empfängerseite 'GET' auswertet,
bedeutet dies, dass ich sie durch Eingaben in der Adresszeile direkt ansprechen kann.
So lassen sich Befehle und schädlicher Code übermitteln, ohne das Formular überhaupt
auszufüllen.
Mehrfach Antworten
Bei Feldern mit nur einem Wert, wird dieser mit dem Feld-Namen als Schlüssel übermittelt.
- Beispiel Texteingabefeld
Der Feldname (der Wert im Feld-Attribut 'name') wird zum assoziativen Namen im $_POST oder $_GET Array. - Beispiel Radiobuttons
Das Feld-Attribut 'name' kommt zwar innerhalb einer Gruppe mehrfach vor, aber es wird nur der Wert des ausgewählten Radiobuttons übermittelt.
name="array[]"
Bei Feldern mit mehrfach Optionen werden die Werte in einem weiteren Array übermittelt. Die Feld-Namen werden zu Array-Namen, indem dem Namen-Attribut eckige Klammern angehängt werden, die Werte sind dann durch den Index abrufbar:
- Checkbox, Auswahllisten und Dropdownmenus
Diese Felder können mehrere Werte liefern, darum muss als Wert ein weiterer Array erzeugt werden, welcher mehrere Werte speichert:name="hobby[]", name="geschlecht[]", name="sprache[]".
Verstecktes Feld
type="hidden"
'Hidden' bedeutet lediglich, dass der Browser das Feld nicht anzeigt, im Quellcode ist die Existenz des hidden-Feldes und auch sein Wert offensichtlich. Moderne Browser bieten inzwischen alle Möglichkeiten, um den Wert in einem hidden-Feld zu verändern - und auch um eigene hidden-Felder hinzuzufügen. Es soll darum in einer Session der Wert, den man durch ein hidden-Feld übermitteln will, zum späteren Vergleich hinterlegt werden.
Datei upload
input type="file"
Der Upload einer Datei, z.B. eines Bildes, wird auf einer eigenen Seite behandelt.
Javascript
Habe ich durch ein Javascript versucht, ein Feld vorzubelegen oder ein hidden-Feld zu füllen, dann kommt auf der anderen Seite nichts an, falls der User seinem Browser Javascripts untersagt.
Darum lassen sich Formulareingaben auch nicht per Javascript sicherheitsrelevant
im Browser prüfen! - Die Prüfung erfolgt zwingend per PHP beim Empfänger auf dem Server!
Das Maximum ist, dem User durch Javascript einen Mehrwert anzubieten, etwa als
aufmerksamer Assistent beim Ausfüllen.
Formulare und JavaScripts lesen Sie dort.