Hallo,
ich habe mit Hilfe eines Tutorials ein Affenformular erstellt. In diesem werden nicht ausgefüllte Felder markiert und eine Meldung Angezeigt.
Das ist soweit i.O.
Sind aber alle Felder ausgefüllt und wird der Submit Button gedrückt wird eine leere Seite aufgebaut. Das soll so nicht sein!
Was muss ich ändern, daß das Formular nach dem versenden der Daten erhalten bleibt?
Gruß
Anbei mal der Code:
<?php header ('Content-Type: text/html; charset=utf-8');
/*
* Dafür sorgen, dass unabhängig von den aktuellen PHP-Einstellungen
* alle auftretenden Fehler angezeigt werden
*/
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
$err = ''; // Variable für die Fehlerausgabe
$success = ''; // Variable für die Ausgabe der Erfolgsmeldung
/*
* Zunächst die Überprüfung der Benutzereingabe durchführen, d.h.
* folgendes wird nur überprüft, falls der Button gedrückt und das
* Formular somit abgesendet wurde
*/
if (isset($_POST['senden'])) {
$eingabe = array(); // zum abspeichern überprüfter Benutzereingaben
$error = array(); // zum merken von fehlerhaften Benutzereingaben
/*
* Überprüfung eines Textfeldes: Wurde auch ein Name eingegeben?
*/
if (isset($_POST['vorname']) && strlen(trim($_POST['vorname'])) && !is_array($_POST['vorname'])) {
$eingabe['vorname'] = htmlspecialchars(trim($_POST['vorname']));
} else {
$error['vorname'] = 'Vorname';
}
/*
* Überprüfung eines Textfeldes: Wurde auch eine Telefonnummer eingegeben?
* Wir nehmen an, dass eine Telefonnummer nur aus Zahlen und min. 4 Ziffern besteht
*/
if (isset($_POST['telefon']) && strlen(trim($_POST['telefon'])) > 4 && is_numeric($_POST['telefon'])) {
$eingabe['telefon'] = trim($_POST['telefon']);
} else {
$error['telefon'] = 'Telefon';
}
/*
* Überprüfung von Checkboxen
* Kein Fehler generieren, wenn nichts ausgewählt wurde, da keine Pflichteingabe
*/
if (isset($_POST['sprachen']) && is_array($_POST['sprachen']) && !empty($_POST['sprachen'])) {
$erlaubte_sprachen = array('deutsch', 'englisch', 'spanisch', 'binaer'); // Erlaubte Eingaben
$eingabe['sprachen'] = array();
// Wurden auch nur erlaubte Sprachen angeklickt und das Formular somit nicht manipuliert?
foreach ($_POST['sprachen'] AS $sprache) {
if (in_array($sprache, $erlaubte_sprachen)) {
$eingabe['sprachen'][] = htmlspecialchars($sprache);
} else {
$error['sprachen'] = 'Sprachen';
}
}
}
if (isset($_POST['heimatland']) && !is_array($_POST['heimatland']) && strlen(trim($_POST['heimatland']))) {
$erlaubte_heimat = array('de', 'ch', 'at'); // Zur vorbeugung manipulierter Formulare
if (in_array($_POST['heimatland'], $erlaubte_heimat)) {
$eingabe['heimatland'] = htmlspecialchars(trim($_POST['heimatland']));
} else {
$error['heimatland'] = true;
}
} else {
$error['heimatland'] = 'Heimatland';
}
/*
* Bis hier sind nun alle Überprüfungen durchgeführt worden.
* Wenn bis hier keine Fehler aufgetreten sind, dann waren die Eingaben korrekt und
* können somit weiterverarbeitet werden. Wenn allerdings ein Fehler aufgetreten ist,
* so wird der folgende Code nicht ausgeführt. Stattdessen wird ein Hinweis auf eine
* fehlerhafte Eingabe ausgegeben und das Formular erneut angezeigt, da wir den
* weiteren Ablauf des Scriptes nicht unterbrechen
*/
if (empty($error)) {
/*
* Hier z.B. alle Daten in der Datenbank abspeichern und darauf hin
* den Benutzer an eine andere Stelle weiterleiten.
*/
$success = 'Alle Eingaben waren okay!';
// Scriptablauf abbrechen, da alles wichtige erledigt ist
exit();
} else {
/*
* Das Fehler-Array wird in einen String umgewandelt
* und dieser String für die Ausgabe gespeichert
*/
$errors = implode(', ',$error);
$err = 'Es sind Fehler aufgetreten: '.$errors;
}
} // END if (isset($_POST['senden']))
?>
<style type="text/css">
.error {
border: red;
border-style: solid;
border-top-width: 2px;
border-right-width: 2px;
border-bottom-width: 2px;
border-left-width: 2px;
}
</style>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta http-equiv="expires" content="0"/>
<title>Affenformular</title>
</head>
<body>
-----------------------------------
<?php
// Fehler ausgeben
if(!empty($err)) echo $err;
// Erfolgsmeldung ausgeben
if(!empty($success)) echo $success;
?>
-----------------------------------
<form class="commentForm" method="post" accept-charset="utf-8" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">
Name:
<input type="text" name="vorname"<?php if(isset($eingabe['vorname'])) echo ' value="'.$eingabe['vorname'].'"'; ?><?php if(isset($error['vorname'])) echo ' class="error"';?> /><br />
Telefonnummer:
<input type="text" name="telefon"<?php if(isset($eingabe['telefon'])) echo ' value="'.$eingabe['telefon'].'"'; ?><?php if(isset($error['telefon'])) echo ' class="error"';?> /><br />
Sprachen: Deutsch
<input type="checkbox" name="sprachen[]" value="deutsch"<?php if(isset($eingabe['sprachen']) && in_array('deutsch', $eingabe['sprachen'])) echo ' checked="checked"'; ?> />
Englisch
<input type="checkbox" name="sprachen[]" value="englisch"<?php if(isset($eingabe['sprachen']) && in_array('englisch', $eingabe['sprachen'])) echo ' checked="checked"'; ?> />
Spanisch
<input type="checkbox" name="sprachen[]" value="spanisch"<?php if(isset($eingabe['sprachen']) && in_array('spanisch', $eingabe['sprachen'])) echo ' checked="checked"'; ?> />
Binär
<input type="checkbox" name="sprachen[]" value="binaer"<?php if(isset($eingabe['sprachen']) && in_array('binaer', $eingabe['sprachen'])) echo ' checked="checked"'; ?> /><br />
<select name="heimatland"<?php if(isset($error['heimatland'])) echo 'class="error"'; ?>>
<option value="">Heimatland auswählen</option>
<option value="de"<?php if(isset($eingabe['heimatland']) && $eingabe['heimatland'] == 'de') echo ' selected="selected"' ?>>Deutschland</option>
<option value="ch"<?php if(isset($eingabe['heimatland']) && $eingabe['heimatland'] == 'ch') echo ' selected="selected"' ?>>Schweiz</option>
<option value="at"<?php if(isset($eingabe['heimatland']) && $eingabe['heimatland'] == 'at') echo ' selected="selected"' ?>>Österreich</option>
</select><br />
<?php
?>
<input type="submit" name="senden" value="Und los!" />
</form>
</body>
</html>