If und else ausgeführt?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • If und else ausgeführt?

    Hallo, ich habe mal eine kleine Frage zu eventuell php5, vll ists aber auch was anderes:
    Hier mal ein Ausschnitt aus dem Code:
    PHP-Code:
    if($_SESSION['kundenid'] == $kundenid) {
        echo 
    "im if...";
        [...
    code der in diesem fall auch ausgeführt wird...]

    }else{
             echo 
    " im else";//wird nicht angezeigt, da ja auch das if ausgeführt wird...

              
    $db->query("....WHERE `...`$kundenid");
    //query wird ausgeführt...
    //ich logge die querys und diese schlägt fehl, da $kundenid leer ist
            

    So zur erklärung. das if trifft zu wie ich auch sehen kann wenn ich die beiden
    zu verlgeichende werte davor ausgebe.... also alles ok.
    das "im else" wird nicht angezeigt.
    ABER: die query wird fehlerhaft ausgeführt.
    sie verursacht durch einen syntaxfehler einen logeintrag den ich sehen kann.
    wenn ich diese zeile auskommentiere, kommt kein neuer log eintrag.
    Es ist also 100% sicher das es diese zeile ist.
    Es kommt aber noch schlimmer, um zu sehen wie weit dieser fehler geht,
    hab ich mal die query statt sie so reinzuschreiben aus ner funktion geholt.
    Dies gelang auch.. d.h. es wurde funktionsaufrufe ausgeführt, obwohl
    der else code nie betreten werden sollte...
    Für mich ist das ganze nicht erklärbar. es liebt auch nicht an der db klasse ( wrapper um PEAR:: DB ) , da diese query nirgens anders vorkommt. Sprich auch keine alte genommen werden konnte oder so..
    Mein php version ist 5.1.2


    Ich weiss nicht woran es liegt.. naja vll hat jemand von euch eine Anregung.

  • #2
    ich kann nur eins sagen, wenn die Bedingung erfüllt wird, wird der else-Teil ganz sicher nicht ausgeführt. Das ganze muss also woanders her kommen. Woher kannst nur du herausfinden, weil du debuggen kannst.

    __FILE__ und __LINE__ Hilft dir evtl.

    Kommentar


    • #3
      Original geschrieben von TobiaZ
      ich kann nur eins sagen, wenn die Bedingung erfüllt wird, wird der else-Teil ganz sicher nicht ausgeführt. Das ganze muss also woanders her kommen. Woher kannst nur du herausfinden, weil du debuggen kannst.
      __FILE__ und __LINE__ Hilft dir evtl.
      Hmm danke, ich habs mal aus Spaß probiert und man kommt zu folgendem ergebnis interessantem ergebnis:
      mein logfile:

      5.4.2006 13:46:53
      ich bin im if

      5.4.2006 13:46:53
      Error: DB Error: syntax error in query_execute:<br> SELECT [..] else:[der richtige dateiname]:69 FROM [...] WHERE [...] =


      wie man sieht wurde das gleiche ausgeführt wie ich annahm.
      Zur Erklärung im if zweig habe ich den logeintrag "ich bin im if" hinzugefügt.
      in der gleichen sekunde wurde die query ausgeführt in der ich bewusst versaut habe.
      im select hab ich "im else:".__FILE__.__LINE__"
      eingefügt und es ist genau die zeile, im else die ich genannt habe.

      Ich bin mir klar, dass es jeder logik entgegensteht, aber mir stellt sich nun halt die Frage warum dieser code ausgeführt wird.
      Es ist auch nicht beliebiger code. alle php-funktionen werde nicht ausgeführt ( echo print header return ) .. aber ich kann sowohl zuweisungen machen, als auch klassenmethoden aufrufen...

      naja zunächst dachte ich an einen bug in php5, kann das beispiel aber leider nicht richtig minimieren um konkret zu werden.

      ich bin sogar noch weiter gegangen:
      ich habe im else einen funktionsaufruf :
      $this->logit();
      die nur eine logging zeile schreibt uuuund :
      im logfile steht diese zeile in der gleichen sekunde wie die anderen beiden...

      Kommentar


      • #4
        So, ich hab das Problem mal verlagert, wenn auch nicht gelöst.

        Ich bekomm die genannte variable per post-var.
        Nun habe ich dies mal umgangen und eine globale variable $kundenid; gesetzt
        und benutze diese.
        Gedanke: ich dachte es läge am verlust des wertes der variablen, somit
        würde bei einer erneuten validierung im else das != true und somit auch else ausgeführt. Nun ist kundenid global und somit alles "sicher"..

        Effekt: Der else-code wird nicht ausgeführt, der if-code aber 2 mal!
        D.h. es lag nicht daran, dass beides ausgeführt wurde, sondern das mein script 2 mal ausgeführt wird.
        Dennoch gilt, das bei der 2ten ( mir nicht bewussten) ausführung $kundenid nicht mehr gesetzt sein kann ( kein assign ans template ), aber dennoch kein echo oder ähnliches funktioniert..

        Die Frage ist nun also : Warum 2 mal ausführen, und warum ist dises "2te" mal nicht korrekt?
        Also warum wird nur mein code (zuweisung funktionsaufrufe) und kein phpcode ausgeführt.

        Durch den "global-var hack" ensteht also im logfile :


        05.4.2006 14:33:15
        ich bin im if

        5.4.2006 14:33:16
        ich bin im if



        vll hat jemand von euch eine idee...

        Kommentar


        • #5
          Hi,

          Bei dem Codefetzen kann man nur raten.

          Gruß Thomas

          Kommentar


          • #6
            Naja ich versuch mal etwas ganuer zu werden, auch wenn ich nicht denke, dass es viel hilft...
            PHP-Code:
                    #$kundenid = $_REQUEST["kundenid"];
            //bisher derzeit aber globaes $kundenid=1;
                    
            global $kundenid;//s.o.
                    #$this->kid_=$_REQUEST["kundenid"];
                    
            if(isset($_REQUEST["action"]))
                        
            $action $_REQUEST["action"];
            #echo $_SESSION['kundenid']."==".$kundenid;
                    
            $msg  = new Message;//unwichtig
                    
            $mydb = new db_iface;//datenbank wrapper
                    
            $tpl  = new display_manager;//template engine wrapper


            if($_SESSION['kundenid'] == $kundenid) {
                echo 
            "im if...";
                [...
            code der in diesem fall auch ausgeführt wird...]

            }else{
                     echo 
            " im else";//wird nicht angezeigt, da ja auch das if ausgeführt wird...

                      
            $db->query("....WHERE `...`$kundenid");
            //query wird ausgeführt...
            //ich logge die querys und diese schlägt fehl, da $kundenid leer ist
                    
            }

            if(!isset(
            $action)) {
            vorbereitung der templateengine..
            zuweisung der var $kundenid ans template 
            dort nen action vom type hidden mit dem namen kundenid und dem value der var)
            tpl->show();
            return;

            }else{
            validierung der felder
            datenbankinsert
            ...
            ggf ...errorhandling
            return tpl->show();



            Wie man sieht bekomm ich die id aus dem formular ( erst per get und dann
            wenn ich im nicht-action fall nen assign gemacht habe, per post-var.
            wenn eine action vorhanden ist ( postvar bei "knopfdruck" ) dann wird die assignte kundenid genommen.
            im Seitenquelltext habe ich auch gesehen, dass der wert gesetzt ist.
            ausserdem wird auch alles korrekt abgearbeitet.. Es wird auch angezeigt das die query korrekt ausgeführt wurde.
            Nur ist im log der fehlereintrag. bzw es ist zu entnehmen, das das skript 2 mal ausgeführt wird. die action des forms ist natürlich das script selbst.
            nur wird wie gesagt nach dem abschicken (button betättigen ) das script noch 2 mal ausgeführt ( header() ) oder so wird nicht gemacht.

            Kommentar

            Lädt...
            X