Affenformular (PHP Lexikon)
letzte Änderung am 26.07.2009
Als Affenformular wird ein spezieller Ansatz der Formularverarbeitung bezeichnet. Das HTML-Formular und dessen Verarbeitung (bspw. die Validierung) befinden sich hierbei innerhalb eines Scriptes.
Das Formular ruft sich deswegen beim Absenden solange selbst auf, wie ungültige Eingaben gemacht werden. Aus dieser Tatsache leitet sich die Bezeichnung Affenformular her. Selbst der mehrfache Aufruf des Formulars mit gleichen Eingaben, in gewisser Weise also das Nachäffen gleicher Aktionen, führt zu keiner Veränderung. Erst die Eingabe gültiger Daten führt zu einer Weiterverarbeitung.
Durch die Anwendung eines Affenformulars ergeben sich einige Vorteile. Zum einen stehen die Benutzereingaben für den Fall von ungültigen Eingaben wieder zur Verfügung und gehen nicht verloren. Auf diese Weise hat der Benutzer die Möglichkeit, die eingegebenen Daten entsprechend anzupassen, ohne gleich das gesamte Formular neu ausfüllen zu müssen.
Zum anderen verhindert eine Weiterleitung nach erfolgreicher Validierung des Affenformulars das mehrfache Abschicken identischer Formulare, wenn die Seite über den Browser neugeladen wird.
Es folgt ein einfaches Beispiel für die Realisierung eines Affenformulars:
Code:
<?php
// Standardwerte für den ersten Aufruf des Formulars
$formValues = array(
'vorname' => '',
'nachname' => '',
'land' => 'Deutschland'
);
// Formular wurde abgeschickt
if(isset($_POST['submit']))
{
$errors = array();
// Validierung der Benutzereingaben
if(empty($_POST['vorname']))
{
$errors[] = 'Bitte den Vornamen angeben.';
}
if(empty($_POST['nachname']))
{
$errors[] = 'Bitten den Nachnamen angeben.';
}
// [...]
// weitere Validierungen
// keine Fehler?
if(count($errors) == 0)
{
// Verarbeitung des Formulars
// Weiterleitung zu neuer Seite
header('Location: seite.php');
}
else
{
// Ausgabe der Fehler
echo '<ul>';
foreach($errors as $error)
{
echo '<li>'.$error.'</li>';
}
echo '</ul>';
}
}
// Ausgabe des Formulars
echo '<form method="post" action="#">',
'<input type="text" name="vorname" value="'.$formValues['vorname'].'" />',
'<input type="text" name="nachname" value="'.$formValues['nachname'].'" />',
'<input type="text" name="land" value="'.$formValues['land'].'" />',
'<input type="submit" name="submit" value="Formular abschicken" />',
'</form>';
?>
>> Allgemeine Fragen oder Probleme mit dem Lexikon-Begriff? Hier gehts zum Forum!
Das Formular ruft sich deswegen beim Absenden solange selbst auf, wie ungültige Eingaben gemacht werden. Aus dieser Tatsache leitet sich die Bezeichnung Affenformular her. Selbst der mehrfache Aufruf des Formulars mit gleichen Eingaben, in gewisser Weise also das Nachäffen gleicher Aktionen, führt zu keiner Veränderung. Erst die Eingabe gültiger Daten führt zu einer Weiterverarbeitung.
Durch die Anwendung eines Affenformulars ergeben sich einige Vorteile. Zum einen stehen die Benutzereingaben für den Fall von ungültigen Eingaben wieder zur Verfügung und gehen nicht verloren. Auf diese Weise hat der Benutzer die Möglichkeit, die eingegebenen Daten entsprechend anzupassen, ohne gleich das gesamte Formular neu ausfüllen zu müssen.
Zum anderen verhindert eine Weiterleitung nach erfolgreicher Validierung des Affenformulars das mehrfache Abschicken identischer Formulare, wenn die Seite über den Browser neugeladen wird.
Es folgt ein einfaches Beispiel für die Realisierung eines Affenformulars:
Code:
<?php
// Standardwerte für den ersten Aufruf des Formulars
$formValues = array(
'vorname' => '',
'nachname' => '',
'land' => 'Deutschland'
);
// Formular wurde abgeschickt
if(isset($_POST['submit']))
{
$errors = array();
// Validierung der Benutzereingaben
if(empty($_POST['vorname']))
{
$errors[] = 'Bitte den Vornamen angeben.';
}
if(empty($_POST['nachname']))
{
$errors[] = 'Bitten den Nachnamen angeben.';
}
// [...]
// weitere Validierungen
// keine Fehler?
if(count($errors) == 0)
{
// Verarbeitung des Formulars
// Weiterleitung zu neuer Seite
header('Location: seite.php');
}
else
{
// Ausgabe der Fehler
echo '<ul>';
foreach($errors as $error)
{
echo '<li>'.$error.'</li>';
}
echo '</ul>';
}
}
// Ausgabe des Formulars
echo '<form method="post" action="#">',
'<input type="text" name="vorname" value="'.$formValues['vorname'].'" />',
'<input type="text" name="nachname" value="'.$formValues['nachname'].'" />',
'<input type="text" name="land" value="'.$formValues['land'].'" />',
'<input type="submit" name="submit" value="Formular abschicken" />',
'</form>';
?>
>> Allgemeine Fragen oder Probleme mit dem Lexikon-Begriff? Hier gehts zum Forum!