Formulare mit PHP erstellen und überprüfen

Anhand eines einfachen Beispiels wird der Aufbau eines Formulars mit Überprüfung erläutert.

Wenn das Formular abgesendet wird und die Eingabewerte nicht korrekt sind, wird das Formular wieder dargestellt und die alten Werte werden als Standardwerte wieder eingesetzt. Damit kann der Benutzer sie korrigieren, ohne diese noch einmal alle (bei mehreren Formularfeldern) eingeben zu müssen. Diese Vorgehensweise wird als „Affenformular” bezeichnet (de.wikipedia.org/wiki/Affenformular).

Auf deutsch:
Der Affe am anderen Ende muss solange auf der Tastatur rumtippen, bis er eine korrekte Eingabe erzeugt, erst dann geht es weiter.

Demo

Die Sendung lautet: Hase (zum testen einen falschen Hasen eingeben )

Formular erstellen

Das Formular besteht hier im Beispiel aus drei HTML-Elementen, den <form>-Tag, den <input>-Tag (Typ: Text) um einen Wert einzugeben. Und einem Button (Typ: Submit) um das Formular abzusenden.

Das action-Attribut: action="formular.php" ruft, nach dem absenden, die gleiche Datei wieder auf.
Übertragen werden die Formulardaten per "POST"-Methode, dies wird im Attribut: method="post" festgelegt.

1
2
3
4
<form action="formular.php" method="post">
 Sendung: <input type="text" name="sendung" value="">
 <input type="submit">
</form>

Innerhalb des Formulars werden doppelte Anführungszeichen ( " ) für die Attribute verwendet, die einfachen Anführungszeichen ( ' ) werden für die PHP-Variable benötigt. Dies muss man unbedingt beachten, ansonsten können PHP-Fehler auftreten und das Script läuft dann nicht.

Formular in PHP einbauen

Nun wird das Formular in die PHP-Variable $formular gesetzt.
Hier werden nun die einfachen Anführungszeichen ( ' ) verwendet.
$formular = ' Inhalt ';

1
2
3
4
5
6
7
<?php
// Formular erstellen
$formular '<form action="formular.php" method="post">
 Sendung: <input type="text" name="sendung" value="">
 <input type="submit">
</form>';
?>

Das Attribut: value="" lassen wir leer, dort wird dann (siehe Script, Zeile 16) eine weitere PHP-Variable ($sendung) eingefügt.

Formulareingaben überprüfen

Der PHP-Interpreter (Parser) verarbeitet das Script immer von oben nach unten, genau so wie wir zum Beispiel eine E-Mail lesen. Und genau so, von der Programm-Logik her, sollte auch das Script geschrieben sein.

Nachfolgend finden Sie die Beschreibung zur Datei: formular.php

Zuerst wird in Zeile 12 der Variable $sendung, ein Wert zugewiesen.
Wenn das Formular gesendet wurde, enthält diese Variable die Eingabe des Benutzers.
$sendung = isset($_POST["sendung"]) ? $_POST["sendung"] : ""
» PHP-Handbuch - Ternärer Operator

Danach setzt man $sendung in die Variable $formular (Zeilen 15 bis 18).
Diese Vorgehensweise bewirkt, das eingegebene Daten nach dem absenden des Formulars wieder angezeigt werden.

In Zeile 21 wird überprüft ob Daten über "POST" gesendet wurden.
if ($_SERVER["REQUEST_METHOD"] == "POST") {…
» PHP-Handbuch - Kontrollstruktur: if

In Zeile 24 wird die Eingabe des Benutzers überprüft (verglichen).
if ($_POST["sendung"] == "Hase") {…

Ab Zeile 27 wird eine Fehlermeldung bei einer falschen Eingabe zusammen mit dem Formular ausgegeben.
» PHP-Handbuch - Kontrollstruktur: else

Ab Zeile 34 wird das Formular ausgegeben (wenn noch keine Daten über "POST" gesendet wurden).

Quelltext „formular.phpKopierenAusblendenZeilen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Formular</title>
 </head>
<body>

<?php
// Variable $sendung einen Wert zuweisen (Wenn das Formular 
// gesendet wurde, enthält die Variable die Eingabe des Benutzers)
$sendung = isset($_POST["sendung"]) ? $_POST["sendung"] : "";

// Formular erstellen
$formular '<form action="formular.php" method="post">
 Sendung: <input type="text" name="sendung" value="' $sendung '">
 <input type="submit">
</form>';

// Wurden Daten über POST gesendet?
if ($_SERVER["REQUEST_METHOD"] == "POST") {

 
// Hier wird die Eingabe überprüft
 
if ($_POST["sendung"] == "Hase") {
  echo 
'<p>Richtig - <a href="formular.php">Noch einmal!</a></p>';
 }
 else {

  
// Bei einer falschen Eingabe wird eine Fehlermeldung 
  // zusammen mit dem Formular ausgegeben.
  
echo '<p>Leider falsch!</p>$formular;
 }
}
else { 

 
// Das Formular wird ausgegeben wenn noch keine 
 // Daten über POST gesendet wurden.
 
echo $formular;
}
?>

</body>
</html>

Formularverarbeitung nach dem EVA-Prinzip - Trennung von HTML und PHP

Soll die Verarbeitung des PHP-Scripts beendet sein bevor das HTML ausgegeben wird, dann wird der komplette PHP-Teil vor dem HTML gesetzt. Diese Vorgehensweise nennt man das EVA-Prinzip, zuerst werden die Daten vom Benutzer eingetragen (Eingabe) dann erfolgt die Verarbeitung und schließlich die Ausgabe, dabei ist also die Reihenfolge entscheidend.

Sämtliche Ausgaben die im vorherigen Script noch mit  echo   gemacht wurden, werden hier erst in der Variable: $ausgabe gespeichert und am Ende im HTML-Teil ausgegeben.

So erreicht man eine bessere Trennung von HTML und PHP, die PHP-Scripte sind übersichtlicher. Es können spezielle Script-Funktionen verwendet werden; zum Beispiel eine Weiterleitung mit header() oder dem herunterladen einer Datei, die nur möglich sind, wenn zuvor nichts an den Browser gesendet wurde.

Quelltext „formular_2.phpKopierenAusblendenZeilen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
$ausgabe 
'';

// Variable $sendung einen Wert zuweisen (Wenn das Formular 
// gesendet wurde, enthält die Variable die Eingabe des Benutzers)
$sendung = isset($_POST["sendung"]) ? $_POST["sendung"] : "";

// Formular erstellen
$formular '<form action="formular_2.php" method="post">
 Sendung: <input type="text" name="sendung" value="' $sendung '">
 <input type="submit">
</form>';

// Wurden Daten über POST gesendet?
if ($_SERVER["REQUEST_METHOD"] == "POST") {

 
// Hier wird die Eingabe überprüft
 
if ($_POST["sendung"] == "Hase") {
  
$ausgabe '<p>Richtig - <a href="formular_2.php">Noch einmal!</a></p>';
 }
 else {

  
// Bei einer falschen Eingabe wird eine Fehlermeldung 
  // zusammen mit dem Formular ausgegeben.
  
$ausgabe '<p>Leider falsch!</p>$formular;
 }
}
else { 

 
// Das Formular wird ausgegeben wenn noch keine 
 // Daten über POST gesendet wurden.
 
$ausgabe $formular;
}
?>
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Formular</title>
 </head>
<body>

<?=$ausgabe;?>

</body>
</html>

Tipps

Formular Generator
Der Formular Generator erstellt genau solche Scripte automatisch. Die erstellten Scripte können die Daten zum Beispiel als E-Mail versenden, in einer Datei oder Datenbank speichern.
Formulardaten über AJAX überprüfen und speichern
Ohne lästigen Seitenwechsel werden die eingegebenen Daten im Formular überprüft und gespeichert.