php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 1,00 durchschnittlich.
Alt 24.08.2006, 15:01  
ssm
Benutzer
 
Registriert seit: 21.03.2006
Beiträge: 65
ssm
Standard if(empty($_POST)) { -> true auch wenn Daten vorhanden....

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($smartytrue);
            
    
// register our validators
    
SmartyValidate::register_form('step1'true);
       
SmartyValidate::register_validator('v_firstname''firstname''notEmpty'falsefalsenull'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'falsefalsenull'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 !!!
ssm ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.08.2006, 15:31  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

evtl:

unset($_POST);

bei nem fehler, um wieder zu 1 zu kommen... ?
__________________
keine
cytrobic ist offline   Mit Zitat antworten
Alt 24.08.2006, 15:47  
ssm
Benutzer
 
Registriert seit: 21.03.2006
Beiträge: 65
ssm
Standard

Das Problem ist, dass der Block unter "if(empty($_POST)) {" auch dann (und seltsamer Weise nur teilweise) ausgeführt wird, wenn $_POST voller Werte ist.

$_SESSION['data'] = array(); aus Zeile 4 wird ausgeführt - somit wird das bereits gefüllte Array neu initiert.

Habe auch schon "if ($_POST['formstep'] == 3)" in if ($_POST['formstep'] == "3") etc. abgeändert um den Wert auch als String zu erkennen - kein Unterschied.

Auch die Abänderung von if(empty($_POST)) in if(empty($_POST['formstep'])) um nach einem spezifischen vorhandenen Wert zu testen, brachte keinen Erfolg.

Bin mit meiner Logik am Ende............
__________________
IP-Popularität und Linkpopularität
ssm ist offline   Mit Zitat antworten
Alt 24.08.2006, 16:11  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

bau doch mal ein print_r($_POST); am anfang des scriptes ein und poste die ausgabe mal wenn nur ein teil ausgeführt wird.
__________________
keine
cytrobic ist offline   Mit Zitat antworten
Alt 24.08.2006, 16:30  
ssm
Benutzer
 
Registriert seit: 21.03.2006
Beiträge: 65
ssm
Standard

hab prints für $_POST, $_GET & $_SESSION im script ums zu checken.......

Habe mal testweise nach Zeile 4 ( $_SESSION['data'] = array() einen Wert hinzugefügt.
-> $_SESSION['data']['test'] = "test";

Und in der Tat - dieser Wert bleibt erhalten, also wird die Session nicht überschrieben -> somit der Bereich unter "if(empty($_POST)) {" nicht ausgeführt, wie es zunächst den Anschein hatte.

Vielmehr wird bei fehlgeschlagener Validierung einfach der in Zeile 30 zugewiesener Wert ( $_SESSION['data']['name'] = $_POST['name']; ) vergessen.

$_SESSION['data']['test'] ist noch da......... ?!?!?!??!

Warum werden Werte aus dem Session-Array vergessen/gelöscht ? Werden doch überhaupt nicht berührt.......
__________________
IP-Popularität und Linkpopularität
ssm ist offline   Mit Zitat antworten
Alt 24.08.2006, 18:14  
Gast
 
Beiträge: n/a
Standard

hab mit smarty nix am Hut, aber diese Dinger hier

SmartyValidate::register_form .....

Kann es sein, da dort mit $_SESSION['data'] gearbeitet wird?

Nimm mal $_SESSION['mein_data'] oder sowas
  Mit Zitat antworten
Alt 24.08.2006, 18:21  
ssm
Benutzer
 
Registriert seit: 21.03.2006
Beiträge: 65
ssm
Standard

hab dem kind schon alle möglichen namen gegeben - an "data" liegts nit !
__________________
IP-Popularität und Linkpopularität
ssm ist offline   Mit Zitat antworten
Alt 30.08.2006, 10:20  
Benutzer
 
Registriert seit: 27.07.2005
Beiträge: 72
skaterboy
Standard

hi
$_POST array ist doch immer gesetzt daher wird dir dort empty kaum was bringen.

proviers mal so

Code:
if(0 == count($_POST)
{
//validieren
}
else
{
//im POST steht was drin
}
skaterboy ist offline   Mit Zitat antworten
Alt 06.09.2006, 17:03  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

falsch,
Zitat
Zitat:
Folgende Dinge zählen als nicht mit einem Wert belegt:

"" (eine leere Zeichenkette)
0 (0 als Integer)
"0" (0 als Zeichenkette)
NULL
FALSE
array() (ein leeres Array)
nikosch ist offline   Mit Zitat antworten
Alt 06.09.2006, 18:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Andererseits...

Zitat:
Zitat von ssm
Habe mal testweise nach Zeile 4 einen Wert hinzugefügt.
-> $_SESSION['data']['test'] = "test";

Und in der Tat - dieser Wert bleibt erhalten, also wird die Session nicht überschrieben -> somit der Bereich unter "if(empty($_POST)) {" nicht ausgeführt, wie es zunächst den Anschein hatte.
Etwa so?
Code:
if(empty($_POST)) {          
    $_SESSION['data'] = array();  
    $_SESSION['data']['test'] = "test";
...
}
Wundert mich jetzt nicht so, wenn $_SESSION['data']['test'] dann noch da wäre . Insofern der Bereich vielleicht doch durchlaufen würde. Ich finds einfacher an dieser Stelle mal ne Meldung auszugeben, dann hast Du Gewißheit.
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mehrere Arrays unterschiedlicher Größe kombinieren querfisch PHP Tipps 2007 9 31.03.2007 21:34
Doppelte Datensetze in der Daten bank !!! Cyber Soldier PHP Tipps 2006 5 01.03.2006 23:30
Checken ob Daten schon vorhanden sind Soese PHP Tipps 2006 4 29.01.2006 18:50
Session Frage - gleiches Formular 2 mal alle Daten behalten NetLook PHP Tipps 2007 1 21.11.2005 18:42
[Erledigt] sql daten für einen kunden auslesen/ändern im Formular PHP Tipps 2005-2 3 12.10.2005 08:36
[Erledigt] Daten aus mehreren Tabellen holen Datenbanken 0 19.09.2005 17:14
Daten auslesen und ändern Datenbanken 2 17.09.2005 19:28
Daten eintragen und auslesen Rettungsdackel Datenbanken 0 14.09.2005 16:29
Überprüfung auf Herkunft der Daten PHP Tipps 2005-2 8 04.08.2005 12:01
javascript und PHP seiten neuladen wenn neue daten vorhanden PHP-Fortgeschrittene 3 18.05.2005 10:59
Datenbank weg? Account gelöscht, aber Daten vorhanden! Datenbanken 3 21.04.2005 12:29
Daten überschreiben in einer txt datei!? CHRIS PHP Tipps 2005 2 02.03.2005 15:02
Daten in Datenbank ändern PHP Tipps 2005 3 27.01.2005 14:40
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05
[Erledigt] Formular mit Daten werden auf anderer Seite zusammengefasst PHP Tipps 2004 4 15.08.2004 15:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
if $_post, php if empty, if empty _post, php not empty, if empty $_post, php post empty, if empty, $_post empty, php if true, php if empty _post, if($_post), php $_post empty, if ($_post, php _post empty, if($_post, php if keine datei da, empty($_post), php empty post, if empty php, if ($_post)

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:21 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.