Der HTML Teil von Formularen

Zum Verfassungszeitpunkt zählt die Liste von Eingabefeldtypen 21. Diese Liste wird jedoch von Zeit zu Zeit mit neuen RFCs erweitert. Die aktuelle Liste ist zu finden unter Link.

Ein Formular ist Grundsätzlich folgendermaßen aufgebaut:

<form method="post" action="ziel-url">
    <!-- hier alle Elemente des Formulars-->
</form>

Die Parameter method und action sind optional, aber zumeist sinnvoll. Der Parameter method legt fest mit welcher HTTP-Methode der Browser das Ergebnis des Formulars an den Server schickt, die gängigsten Formate sind GET und POST. Der Parameter action legt fest wo das Ziel für das Ergebnis des Formulars ist. Der Standard für method ist GET und der Standard für action ist die aktuelle Seite. Was man in ein Formular alles für Inhalte setzen kann, ist unter obigem Link zu finden oder einige Beispiele unter diesem Paragraphen.

Texteingabefeld

<input type="text" name="txtName" />

Checkbox/Kontrollkästchen

<input type="checkbox" id="chkRueckruf" name="chkRueckruf" value="Yes" checked />
<label for="chkRueckruf">Ja</label> 

Auswahlliste

<select name="optRueckrufZeit" >
    <option value="1"> 08:00 - 10:00 </option>
    <option value="2" selected> 10:00 - 12:00 </option>
    <option value="3"> 12:00 - 14:00 </option>
</select>

Radiobutton/Optionsfeld

<input type="radio" id="raKatalogYes" name="raKatalog" value="Yes" />
<label for="raKatalogYes">Ja</label>
<input type="radio" id="raKatalogNo" name="raKatalog" value="No" checked />
<label for="raKatalogNo">Nein</label>

Befehlsschaltfläche

<input type="reset" value="Zurücksetzen" />
<input type="submit" name="btnDatenSenden" value="Abschicken" />

Der PHP-Teil von Formularen & PHP-Arrays

Um Formulare die vom Browser an unsere PHP Applikation gesendet werden auszuwerten zu können, müssen wir einen kurzen Exkurs machen zu PHP-Arrays. Die offizielle Anleitung ist hier zu finden.

Ein Array ist eine Liste von Werten des gleichen Typs, die im Speicher hintereinander liegen. Die Liste ist eine einzige Variable und um auf die einzelnen Objekte in der Liste zuzugreifen benötigt man den sogenannten Index. Der Index ist im Fall von PHP entweder eine Ganzzahl (bzw. ein Integer) oder eine Zeichenkette. Untenstehend sind einige Beispiele mit jeweils in der Zeile darüber einem Kommentar was die darauffolgende Zeile macht.

# Erstellung eines leeren Arrays in PHP
$myarray1 = array();

# Erstellung eines Arrays mit Inhalten in PHP
$myarray2 = array(
    0 => "Erstes Element",
    1 => "Zweites Element",
);

# In PHP müssen Arrays nicht mit Null anfangen wie bspw. in C++
$myarray3 = array(
    99 => "Erstes Element",
    100 => "Zweites Element",
);

# Der Arrayindex wird immer in einen String Konvertiert. Deshalb gilt folgendes:
$myarray4 = array(1 => "Aufpassen!", true => "Falscher Wert ausgegeben!");
var_dump($myarray4); # Ergibt: "array(1) { 1=> "Falscher Wert ausgegeben!" }"

# Greife lesend auf einen Wert des Arrays zu
var_dump($myarray3[99]); # Ergibt: string(14) "Erstes Element"

# Ein Array löschen
unset($myarray1);

# Dem Array ein neues Element hinzufügen
$myarray2[3] = "Drittes Element";
$myarray2[] = "Viertel Element"; # Das hier ist sogenannter syntactic sugar, versucht zu vermeiden das zu benutzen.

So nun zum eigentlichen Thema dieses Abschnitts: Wie werte ich ein Formular in PHP aus?

Hierzu gibt es zwei Dinge: $_GET und $_POST. Diese beiden Spezialarrays werden automatisch mit den POST und GET Variablen die der Request enthält befüllt. Diese enthalten Nutzerdaten und sind somit als “feindlich”, “verseucht” bzw. unsicher zu behandeln. Dies meint das sie Schadcode enthalten können und zuallererst validiert werden müssen bevor sie weiter im Programm verwendet werden.

Um nicht auf Schlüssel zuzugreifen, die eventuell nicht vorhanden sind in diesen automatisch generierten Arrays, stellt PHP uns die Methode (isset(<ARRAY>) zur Verfügung. Verknüpfen wir diese Funktion mit einer IF-Verzweigung, so können wir unser Skript/Programm stabiler konstruieren. Untenstehend ein Rohgerüst als Beispiel:

if (isset($_POST["SCHLUESSEL"])) {
    # Schlüssel vorhanden
} else {
    # Schlüssel nicht vorhanden
}

Anmerkung: Die Schlüssel in $_POST und $_GET sind Case-Sensitive. “Schluessel” ist nicht gleich “schluessel”.

Debugging und Manipulierte Requests im Browser

Um Webapplikationen einfacher debuggen zu können stellen alle Browserhersteller die sogenannten “Developer Tools” oder auf Deutsch “Entwickler Tools” zur Verfügung. Sie sind zu öffnen indem auf der Tastatur die Taste F12 gedrückt wird.