1.5 HTML-Formulare
Formulare sind eine der Stärken von PHP, da mithilfe von PHP Formulare erstellt und ausgewertet werden können.
Formulare definieren
Formulare haben meist einen gleichen Grundaufbau: es gibt Eingabefelder, Felder für mehrzeiligen Text, Listen zum Auswählen und natürlich immer einen Button zum Absenden der Daten. Ein Formular wird generell eingeleitet mit <form>(...)</form>
, dazwischen stehen alle HTML-Elemente, die zum Formular gehören. Allerdings sind hier auch Elemente wie Überschriften oder Textabsätze erlaubt.
Das Attribut action
im <form>
-Tag gibt an, wohin die Daten nach dem Absenden übertragen werden sollen (dazu später mehr). Das zweite Attribut method
beschreibt die Art der HTTP-Methode, mit der die Daten zwischen Client und Web-Server übertragen werden. Wird dort der Wert get
eingesetzt, hängt der Browser die Daten als Parameter an die Zieladresse, beim Wert post
werden die Daten im HTTP-Body verschickt.
Eingabefelder erzeugen
Das HTML-Element <input>
definiert Eingabefelder. Hier sehen wir ein einfaches Texteingabefeld.
Es gibt immer einen Text vor dem Eingabefeld. Hier lautet der Text 'Vorname:'. Dieser zum Eingabefeld dazugehörige Text wird mit dem Element <label>
gekennzeichnet. Das for
-Attribut von <label>
muss mit dem id
-Attribut von <input>
übereinstimmen. Somit ist semantisch klar, dass <label>
und <input>
zusammen gehören.
Der Wert im name
-Attribut von <input>
wird später bei der Übertragung zum Webserver via HTTP zu einem Parameter. Wir wissen damit, dass es einen Parameter prename
geben wird, der als Wert den vom User in das Feld eingegebenen Inhalt enthält.
Das Element <input>
kann unterschiedliche Typen von Eingabefeldern erstellen, die auf unterschiedlichen Geräten mit unterschiedlichen Browsern teilweise sehr unterschiedlich dargestellt werden. Hier werden nur einige von vielen Möglichkeiten aufgeführt.
Formular-Elemente
Verschiedene Typen von Eingabefeldern, die durch das Attribut type
definiert werden, inklusive einer kurzen Beschreibung ihrer Funktion.
Basiswerte für das Attribut type=... |
Beschreibung |
---|---|
text |
Normales Eingabefeld für einzeiligen Text. |
radio |
Radiobuttons für die Auswahl einer Option aus mehreren Möglichkeiten. |
checkbox |
Checkbox für eine oder mehrere Optionen. |
password |
Feld für Passworteingaben; Eingaben werden als Punkte oder Sternchen dargestellt, aber nicht verschlüsselt übermittelt, sondern nur die Darstellung während der Eingabe ist "maskiert". |
email |
Feld für E-Mail-Adressen; spezielle E-Mail-Tastatur auf mobilen Geräten. |
number |
Feld für die Eingabe einer Zahl. |
date |
Feld zur Auswahl eines Datums. |
range |
Schieberegler zur Auswahl eines Wertes aus einem Bereich. |
file |
Ermöglicht dem Nutzer das Hochladen einer Datei. |
url |
Feld für die Eingabe von URLs. |
search |
Feld für Suchanfragen. |
submit |
Ein Button zum Absenden des Formulars. |
reset |
Ein Button zum Zurücksetzen des Formulars auf den ursprünglichen Zustand. |
Weitere Werte für das Attribut type=... |
Beschreibung |
---|---|
datalist |
Bietet eine Autovervollständigungsfunktion für das Eingabefeld an. |
time |
Feld zur Auswahl einer Uhrzeit. |
color |
Feld zur Auswahl einer Farbe. |
hidden |
Unsichtbares Eingabefeld, sollte heutzutage nicht mehr genutzt werden (also echt "verboten" und deutet auf eine sehr schlechte Programmierung hin). |
Diese Elemente ermöglichen eine Vielzahl von Interaktionen und Dateneingaben in Webformularen.
Attribute für das input-Element
-
name="..."
ist ein notwendiges Attribut und muss einen eindeutigen Namen haben. Der Wert imname
-Attribut wird bei der Übertragung zum Webserver via HTTP zu einem Parameter. Dieser Parameter kann in PHP ausgelesen werden und enthält als Wert die Nutzereingabe in das Formularfeld. -
value="..."
schreibt in das Formularfeld etwas hinein. In der PHP-Programmierung kann dasvalue
-Attribut dynamisch Inhalte aus der Datenbank erhalten, was ein Formular von der Datenbank vorausgefüllt erscheinen lässt, z.B. wenn sich der Nutzer eingeloggt hat und seine Daten ändern möchte. -
readonly
sorgt dafür, dass der Text im Formularfeld nicht überschrieben werden kann. Dies ist nur in Kombination mitvalue
sinnvoll und kann nützlich sein, damit der Nutzer wichtige Eingaben nicht so einfach überschreibt. Eine Änderung der Daten wäre dann über eine JavaScript-Funktion durchführbar. -
size="..."
gibt die Länge des Feldes an. Dies kann genutzt werden, um das Layout des Formulars besser zu kontrollieren. -
maxlength="..."
gibt die maximale Anzahl der einzugebenden Zeichen an. Dies hilft, die Eingabe auf die erforderliche Länge zu beschränken und verhindert, dass Benutzer ungewollt zu viel Text eingeben.
Neuere Attribute in HTML5
HTML5 führt weitere nützliche Attribute für <input>
-Elemente ein, die die Benutzerfreundlichkeit und Validierung von Formularen verbessern:
-
placeholder="..."
zeigt einen Hinweistext im Eingabefeld an, bis der Benutzer beginnt, etwas einzugeben. -
required
kennzeichnet ein Feld als obligatorisch, sodass das Formular nicht abgesendet werden kann, ohne dass dieses Feld ausgefüllt wurde. -
pattern="..."
erlaubt die Angabe eines regulären Ausdrucks, gegen den der Eingabewert validiert wird. Für ein Postleitzahl-Feld kann dieser Ausdruck verwendet werden: pattern="^[0-9]{5}$" -
autocomplete="on|off"
ermöglicht oder verhindert die Autovervollständigung des Eingabefelds. -
autofocus
legt fest, dass ein spezifisches Eingabefeld automatisch den Fokus erhält, sobald die Seite geladen wird. -
min="..."
undmax="..."
definieren den minimalen bzw. maximalen Wert für Eingaben vom Typnumber
,range
,date
etc. -
step="..."
definiert die Schritte, in denen ein Wert bei Typen wienumber
oderrange
verändert werden kann.
Aufgaben zum Abschnitt Formulare
Aufgabe 1
Erstellen Sie ein einfaches HTML-Formular für eine Kontaktseite mit den Feldern Name und E-Mail, Betreff und Nachricht. Das Formular soll die Daten mittels der POST
-Methode an submit_contact.php
senden.
Lösung zu Aufgabe 1
Aufgabe 2
Erweitern Sie das Formular aus Aufgabe 1 um ein Eingabefeld für eine fünfstellige Postleitzahl (PLZ). Nutzen Sie das pattern
-Attribut, um sicherzustellen, dass nur Zahlen eingegeben werden können und das Feld exakt 5 Ziffern enthält.