Formularprüfung - Typischer Formularaufbau, Affenformular
Autor
Flitze
Klicks 113012
Keywords:
Formulare prüfen, Formular verarbeiten, Variablen übergeben, Datenübergabe, $_GET, Affenformular, Daten in Formular erhalten, Daten erneut eintragen, Formularaufbau, HTML, Affenformular
Klicks 113012
Rating für Formularprüfung
5.9 von 10
Bewertungen36
Stand
12.06.2013
5.9 von 10
Bewertungen36
Keywords:
Formulare prüfen, Formular verarbeiten, Variablen übergeben, Datenübergabe, $_GET, Affenformular, Daten in Formular erhalten, Daten erneut eintragen, Formularaufbau, HTML, Affenformular
Breadcrumb:
Tutorials » Formularprüfung » Formularprüfung - Typischer Formularaufbau, Affenformular
6. Typischer Formularaufbau
[ADSENSE_LINE]Bei der Bearbeitung von Formularen hat es sich bewährt, Formulare in der gleichen Datei anzuzeigen und zu verarbeiten.
Das könnte so aussehen:
PHP:
Dateiname: formular.php
<?php
// Wenn auf 'Eintragen' geklickt wurde, verarbeite das Formular
if(isset($_POST['submit']) AND $_POST['submit']=='Eintragen'){
// z.B. Speichern in einer Datenbank oder Textdatei...
echo "Vielen Dank!<br>\n".
"Sie wurden erfolgreich in den Newsletter aufgenommen.";
}
// Ansonsten, z.B. wenn der User das Formular zum 1. Mal aufruft, wird das Formular angezeigt
else{
?>
Bitte geben Sie ihren Namen und Ihre Email-Adresse ein, um sich für den Newsletter einzutragen<br>
<form action="formular.php"
method="post"
accept-charset="ISO-8859-1">
<table>
<tr>
<td>
Name*
</td>
<td>
<input type="text" name="Name">
</td>
</tr>
<tr>
<td>
Email-Adresse*
</td>
<td>
<input type="text" name="Email">
</td>
</tr>
</table>
<input type="submit" name="submit" value="Eintragen">
</form>
<?php
}
?>
Zunächst wird das Formular angezeigt, da $_POST['submit'] noch nicht existiert. Wenn der User auf 'Eintragen' klickt, werden die Formulardaten bearbeitet und
Zitat:
Vielen Dank
Sie wurden erfolgreich in den Newsletter aufgenommen.
Sie wurden erfolgreich in den Newsletter aufgenommen.
wird angezeigt.
Allerdings wäre es nicht gut, wenn jemand vergisst, seine Emailadresse anzugeben, da es ja keinen Sinn macht einen Namen ohne Email-Adresse zu speichern. Deshalb sollten die obligatorischen Felder mit '*' o.ä. gekennzeichnet werden. Bei der Verarbeitung muss nun noch geprüft werden, ob diese Daten auch wirklich eingegeben wurden.
7. Formulardaten überprüfen
Eine Fehlerüberprüfung lässt sich ebenfalls standardisiert darstellen. Sie könnte wie folgt aussehen:
PHP:
<?php
// Wenn auf 'Eintragen' geklickt wurde, verarbeite das Formular
if(isset($_POST['submit']) AND $_POST['submit']=='Eintragen'){
// Fehlerarray erzeugen
$errors = array();
// Prüfen, ob alle Felder existieren
if(!isset($_POST['Name'], $_POST['Email']))
$errors[] = "Bitte benutzen sie unser Formular.";
else{
// Prüfen, ob Name und Email nicht leer sind
if(trim($_POST['Name'])=='')
$errors[] = "Bitte geben Sie ihren Namen ein.";
if(trim($_POST['Email'])=='')
$errors[] = "Bitte geben Sie ihre Email-Adresse ein.";
}
// Prüfen, ob ein Fehler aufgetreten ist
if(count($errors)){
echo "Sorry, ihre Daten konnten nicht bearbeitet werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
echo "Zurürck zum <a href=\"formular.php\">Formular</a>\n";
}
else{
// z.B. Speichern in einer Datenbank oder Textdatei...
echo "Vielen Dank!<br>\n".
"Sie wurden erfolgreich in den Newsletter aufgenommen.";
}
}
// Ansonsten, z.B. wenn der User das Formular zum 1. Mal aufruft, wird das Formular angezeigt
else{
//...
?>
Zuerst überprüft man, ob auch wirklich das vorgesehene Formular benutzt wurde, indem man überprüft, ob alle Eingabe-Elemente existieren (Vorsicht bei Checkboxen, Radiobuttons und Auswahllisten. Wenn dort nichts ausgewählt wurde, existiert auch kein entsprechendes $_POST-Array-Element!).
Nun prüft man, ob in das Feld auch etwas eingegeben wurde. Im obigen Beispiel wird das mittels
PHP:
<?php
if(trim($_POST['Name'])=='')
?>
getan. Alternativ dazu könnte man auch
PHP:
<?php
if(!empty($_POST['Name']))
?>
schreiben.
Falls ein Fehler auftritt, wird eine entsprechende Meldung in dem Fehlerarray $errors gespeichert. Anschließend wird geprüft, ob eine Fehlermeldung in dem Array gespeichert wurde. Ist dies der Fall, werden die einzelnen Fehlermeldungen ausgegeben, sodass der User sieht, was er falsch gemacht hat. Außerdem wird ein Link angezeigt, mit dem er zum Formular zurückkehren kann.
Natürlich können auch noch weitere Fehlerabfragen eingebaut werden, z.B. ob der Name aus mindestens 3 Zeichen besteht oder die Email-Adresse eine gültige Syntax hat. Dazu müsst ihr einfach eine weitere if-Abfrage mit der ensprechenden Bedingung und eine dazugehörige Fehlermeldung in euer Script implementieren.
Wenn die Daten vollständig sind, also
PHP:
<?php
count($errors)
?>
0 liefert, werden die Daten schließlich weiterverarbeitet.
8. Das Affenformular
Bei diesem Formular wird das Formular so lange angezeigt, bis der User die richtige Daten eingegeben hat. Vom Prinzip her beruht es auf der o.g. Technik der Formularprüfung.
PHP:
<?php
// Wenn auf 'Eintragen' geklickt wurde, prüfe das Formular
if(isset($_POST['submit']) AND $_POST['submit']=='Eintragen'){
// Fehlerarray erzeugen
$errors = array();
// Prüfen, ob alle Felder existieren
if(!isset($_POST['Name'], $_POST['Email']))
$errors[] = "Bitte benutzen sie unser Formular.";
else{
// Prüfen, ob Name und Email nicht leer sind
if(trim($_POST['Name'])=='')
$errors[] = "Bitte geben Sie ihren Namen ein.";
if(trim($_POST['Email'])=='')
$errors[] = "Bitte geben Sie ihre Email-Adresse ein.";
}
}
// Wenn das Formular geprüft wurde und kein Fehler gefunden wurde verarbeite die Daten
if(isset($errors) AND !count($errors)){
// z.B. Speichern in einer Datenbank oder Textdatei...
echo "Vielen Dank!<br>\n".
"Sie wurden erfolgreich in den Newsletter aufgenommen.";
}
// Beim ersten Aufruf oder beim Finden eines Fehlers wird das Formular angezeigt
else {
// Wurde bei der Formularprüfung ein Fehler gefunden wird er über dem Formular ausgegeben
if(isset($errors)){
echo "Sorry, ihre Daten konnten nicht bearbeitet werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
echo "<hr>\n";
}
?>
Bitte geben Sie ihren Namen und Ihre Email-Adresse ein, um sich für den Newsletter einzutragen<br>
<form action="<? echo $_SERVER['PHP_SELF']; ?>"
method="post"
accept-charset="ISO-8859-1">
<table>
<tr>
<td>
Name*
</td>
<td>
<?php
// Stellt den Namen wieder her, wenn ein Fehler auftrat
if(isset($_POST['Name']))
// htmlentities sichert das Formular gegen Cross-Scripting
echo "<input type=\"text\" name=\"Name\" value=\"".htmlentities($_POST['Name'], ENT_QUOTES)."\">\n";
else
echo "<input type=\"text\" name=\"Name\">\n";
?>
</td>
</tr>
<tr>
<td>
Email-Adresse*
</td>
<td>
<?php
// Stellt die Email-Adresse wieder her, wenn ein Fehler auftrat
if(isset($_POST['Email']))
echo "<input type=\"text\" name=\"Email\" value=\"".htmlentities($_POST['Email'], ENT_QUOTES)."\">\n";
else
echo "<input type=\"text\" name=\"Email\">\n";
?>
</td>
</tr>
</table>
<input type="submit" name="submit" value="Eintragen">
</form>
<?php
}
?>
Fehlerprüfung und Verarbeitung der Daten sind nun aber getrennt, so dass das Script die Verarbeitung nicht nur beendet, sondern gleich wieder das Formular anzeigen kann.
Das Zielscript des Formulars wurde durch $_SERVER['PHP_SELF'] ersetzt. In dieser Variable ist die aktuelle Seite gespeichert, allerdings ohne Parameterangaben! So ist das Formular universell einsetzbar und nich an einen Dateinamen gebunden.
Der eigentliche Vorteil dieses Formulars liegt in der Wiederherstellung der Daten, wenn ein Fehler auftrat. Der Wert beim Absenden des Formulars wird dabei als value-Attribut des entsprechenden Feldes wieder eingetragen. Dabei müssen unbedingt die HTML-spezifischen Zeichen umgewandelt werden, da es sonst zu Fehler bei der Anzeige kommen kann, wenn der User irgendwo die Zeichenfolge "> stehen hat. Damit würde das Inputfeld geschlossen werden und alles was danach kommt, stünde irgendwo "außerhalb" des Feldes auf der Seite. Um die Zeichen umzuwandeln, nutze ich die Funktion htmlentities.
PHP:
<?php
// Stellt den Namen wieder her, wenn ein Fehler auftrat
if(isset($_POST['Name']))
// htmlentities sichert das Formular gegen Cross-Scripting
echo "<input type=\"text\" name=\"Name\" value=\"".htmlentities($_POST['Name'], ENT_QUOTES)."\">\n";
else
echo "<input type=\"text\" name=\"Name\">\n";
?>
Zurück zur vorigen Seite:
Formularprüfung - Formulardaten an MySQL übergeben Weiter zur nächsten Seite:
Formularprüfung - Optimierung