Formulardaten bei Fehler tortzdem sichtbar machen

stega

Erfahrenes Mitglied
Hi!
Ich habe ein Formular, in dass der User mehrere Daten eingeben muss.
Bei Klick auf Abschicken soll das Formular zu einer switch anweisung springen
PHP:
<form action="registrieren.php?go=test" action="post">
//hier kommen dann ein paar Felder u.a. ein <input name="name">
</form>
<?
switch ($go) {
case "test" :
if ($name=="") {
print "Kein Name eingegeben";
}
//hier sollen dann noch die anderen Felder überpüft werden
break;
}
?>
Das Formular soll also die Felder einzeln durchgehen und überprüfen, ob sie ausgefüllt wurden. Wenn ein Feld nicht ausgefüllt wurde, dann soll über dem Feld eine Nachricht erscheinen, die den User zum Ausfüllen auffordert. Die bereits eingegebenen Daten sollen dabei aber nicht gelöscht werden, sondern weiterhin eingegeben bleiben.
Bisher löscht das Formular mir immer die Daten und ich muss alles wieder von vorne eintragen.
Wie kann ich das ändern?
danke
mfg
stega :)
 
Es gibt für input-Elemente ein Attribut namens value, mit dessen Hilfe ein vorgegebener Wert definiert werden kann.


Übrigens empfehle ich dir die Verarbeitung der gesendeten Daten vor der Ausgabe des Formulars zu setzen.
 
Du mußt die Daten natürlich dann wieder ans Formular übergeben entweder via session, GET oder HIdden Post das sind die 3 Möglichkeiten die mir jetzt spontan dazu einfallen. Je nachdem um welche und wieviele Daten es geht muß man sich eben für eine der 3 Möglichkeiten entscheiden...
 
Meinst Du sowas:?
PHP:
<?
unset($error);
if(!empty($go) && $go == 'test') {
    $error=array();
    if (empty($_REQUEST['name'])) {
        $error['name'] = "Kein Name angegeben";
    }
    //alle weiteren Eingaben auf dieselbe Weise prüfen
}
if (isset($error) && sizeof($error)==0) {
    //alles OK: eintragen
} else {
    //formularkopf ausgeben

    if (isset($error['name'])) {
        echo ($error['name']);
    }
    echo "<input type=\"text\" name=\"name\" value=\"".(empty($_REQUEST['name'])?"":$_REQUEST['name'])."\">";


    //Das nochmal für andere Eingabefelder wiederholen


    //formalarende ausgeben
}
 
@hpvw: das kommt schon hin... nur, wie bau ich das ein? also mit dem switch? einfach anstatt switch oder ins switch rein....aber sonst glaub ich, kommt das meinen Vorstellungen am nähesten... ;-)
 
Das ist im Prinzip Ersatz für das, was Du geschrieben hast.
Du musst nur noch die Kommentare füllen.
Also weitere Abfragen machen,
für Formularkopf echo "<form ...>"; ausgeben, für Formularende echo "</form>"; ausgeben und evtl. bei der Ausgabe der einzelnen Felder noch ein bisschen html-Formatierung mit ausgeben und dem Feld ein Label geben (echo "Dein Name: <input ...>").
Da wo Ok im Kommentar steht schreibst Du den Inhalt des Formulars in Deine Datenbank.
Du brauchst keinen Switch.
Wenn $go auch noch andere Werte annehmen kann, kannst Du den if Block, in dem $go auf "test" überprüft wird, mit else if noch mal direkt dahinter hängen:
PHP:
if(!empty($go) && $go == 'test') {
    $error=array();
    if (empty($_REQUEST['name'])) {
        $error['name'] = "Kein Name angegeben";
    }
    //alle weiteren Eingaben auf dieselbe Weise prüfen
} else if(!empty($go) && $go == 'keintest') {
    $error=array();
    if (empty($_REQUEST['name'])) {
        $error['name'] = "Kein Name angegeben";
    }
    //alle weiteren Eingaben auf dieselbe Weise prüfen
}
 
cool, es klappt, danke schön
eine Frage hätt ich aber noch:
Ich habe jetzt unten AGB's, die der User aktzeptierten soll (indem er auf ne Checkbox klickt)
Wie baue ich das jetzt ein? Weil wenn er nicht klickt, soll das Gleiche wie vorher kommen (also die Aufforderung) und wenn er geklickt hat, dann eben nix :rolleyes:

Wie baue ich das ein?
 
Zurück