Hallo,
prüfe eine reihe aufeinander folgender Formulare mit smarty & SmartyValidate......(keine "multiform-definition" - es sind separate formulare)
PHP-Code:
if(empty($_POST)) { // display initial form
### set session array for valid formdata
$_SESSION['data'] = array(); // WIRD AUCH AUSGEFÜHRT WENN $_POST NICHT LEER IST !!!!!!!!!!!!??????
echo "TEST"; // wird tatsächlich nur beim ersten mal angezeigt !!!
// new form, we (re)set the session data
SmartyValidate::connect($smarty, true);
// register our validators
SmartyValidate::register_form('step1', true);
SmartyValidate::register_validator('v_firstname', 'firstname', 'notEmpty', false, false, null, 'step1');
$smarty->display('form_1.tpl');
}else{
########################################
### validate step 1 & display step 2 ###
if ($_POST['formstep'] == 2){
SmartyValidate::connect($smarty);
SmartyValidate::register_form('step1');
if(SmartyValidate::is_valid($_POST, 'step1')) {
### write valid values to session-array ###
$_SESSION['data']['name'] = $_POST['name'];
SmartyValidate::register_form('step2', true);
SmartyValidate::register_validator('v_lastname', 'lastname', 'isInt', false, false, null, 'step2');
$smarty->display('form_2.tpl');
// redisplay form 1
}else{
// syntax checks failed
$smarty->assign($_POST);
$smarty->display('form_1.tpl');
}
}
########################################
### validate step 2 & display step 3 ###
if ($_POST['formstep'] == 3){
SmartyValidate::connect($smarty);
SmartyValidate::register_form('step2');
if(SmartyValidate::is_valid($_POST, 'step2')) {
### write valid values to session-array ###
$_SESSION['data']['lastname'] = $_POST['lastname'];
$smarty->display('form_3.tpl');
// redisplay form 2
}else{
// syntax checks failed
$smarty->assign($_POST);
$smarty->display('form_2.tpl');
}
}
}
Von Schritt 1 auf Schritt 2 läuft alles wie erwartet - die validen Daten werden hübsch ins session-array geschrieben.
Schlägt jedoch die Validierung von Schritt 2 auf schritt 3 fehl und Formular 2 wird erneut angezeigt, so wird $_SESSION['data'] = array(); aus Zeile 4 und die Registrierung der Validierung aus Zeile 13 !!! erneut ausgeführt.
das TEST-echo aus Zeile 6 hingegen wird nicht erneut ausgeführt.....
$_POST ist weder in schritt 1auf2 noch in Schritt 2auf3 leer.
Wie kommt es zu der Ausführung nach if(empty($_POST)) und der zusätzlichen Anzeige des Formulas aus Schritt 2 und 3 , wenn $_POST doch nicht leer ist und nur das jeweilige Formular angezeigt werden müsste ??
Verzweifle hier seit 2 Tagen und bin für jeden Tipp äusserst dankbar !!!