Script läuft auf Localhost Einwandfrei -> Server Problembehaftet (OOP)

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

  • Script läuft auf Localhost Einwandfrei -> Server Problembehaftet (OOP)

    Hey!
    Ich habe nun mein erstes Übungsprojekt für OOP gestartet und bin mittlerweile auch schon recht weit gekommen..
    jetzt habe ich meine erste Version schon fertig und auf meinem Localhost läuft alles völlig fehlerfrei..
    Localhost: Apache 1.3.33 (Win32); PHP 4.4.2; mySQL 4.1.9;

    Mein Projekt wäre ein relertiv simples Login/Logout Script (zwar doch noch um einiges erweitert, allerdings momentan im Grundprinzip stimmt's so).
    Nun habe ich um schließlich alles inklusive mail() -funktion testen zu können (wegen aktivierungs-mail-versant)
    auf den Server geladen.. doch dort gibt es scheinbar einige Probleme (mit meinen Klassen)..
    Server: Apache 1.3.33; PHP 4.4.0; mySQL 4.1.11;

    Der für die Fehler relevante Datei-Inhalt wäre wie folgt...
    index.php
    PHP-Code:
    <?php
    include('config.php');
    if(
    $show_all_errors){ERROR_REPORTING(E_ALL);}else{ERROR_REPORTING(0);}
    SESSION_START();
    include(
    'lang/'.$lang.'/'.$lang.'_standart.php');
    include(
    'class/queryclass.php');
    include(
    'class/userclass.php');
    echo 
    "<PRE>".var_dump($_SESSION['user'])."</PRE>";
    if(isset(
    $_SESSION['user']))
        {
        
    $user unserialize($_SESSION['user']);
        }
    else
        {
        
    $user = new user();
        }
    $user->security();
    if(
    $user->loggedin)
        {
        include(
    'lang/'.$lang.'/'.$lang.'_gamestandart.php');
        }
    ?>
    ...
    ..
    .
    Wird diese Datei zum ersten Mal ausgeführt sieht noch alles so aus, wie es sein sollte..

    Der Login/Logout wird in login.php und der Klasse 'user' ausgeführt..

    relevante Teil der login.php:
    PHP-Code:
    ...
    if(
    $user->login($HTTP_POST_VARS['uname'], $HTTP_POST_VARS['pw']))
            {
            echo 
    $lang_content_login_succes."<BR>";
            echo 
    $lang_content_reload."
    <SCRIPT type=\"text/javascript\" language=\"javascript\">
    window.setTimeout(\"location.replace('index.php')\",1200);
    </SCRIPT>"
    ;
            }
        else
            {
            if(
    $user->uname)
                {
                if(
    $user->activated)
                    {
                    echo 
    "<SPAN class='error'>$lang_content_login_falsepass</SPAN>";
                    }
                else
                    {
                    echo 
    "<SPAN class='error'>$lang_content_login_notactivated</SPAN>";
                    }
                }
            else
                {
                echo 
    "<SPAN class='error'>$lang_content_login_unotexist</SPAN>";
                }

            }
    ... 
    und der relevante Teil der Klasse:
    PHP-Code:
    class user
        
    {    
        var 
    $uid;
        var 
    $uname;
        var 
    $fname;
        var 
    $lname;
        var 
    $mail;
        var 
    $activated;
        var 
    $ip;
        
        var 
    $loggedin=false;
        
        function 
    user()
            {
            }
        function 
    login($loguname$logpw)
            {
            include(
    'config.php');
            
    $sql "SELECT pw, activated FROM $usertbl WHERE uname LIKE '$loguname';";
            
    $udata = new query($sql);
            if(
    $udata->numRows()<=0)
                {
                
    $this->uname false;
                return 
    false;
                }
            else
                {
                
    $dbudata $udata->fetch();
                if(
    $dbudata['pw']==MD5($logpw))
                    {
                    if(
    $dbudata['activated']!='1')
                        {
                        
    $this->activated false;
                        }
                    elseif(
    $dbudata['activated']=='1')
                        {
                        
    $this->activated true;
                        
    #Login-Action
                        
    $this->uname $loguname;
                        
    $ip getenv("REMOTE_ADDR");
                        
    $iptime time();
                        
    $sql "UPDATE $usertbl SET ip = '$ip', iptime = '$iptime' WHERE
    uname = '
    $this->uname'";
                        
    $store_ip = new query($sql);
                        
                        
    $sql "SELECT * FROM $usertbl WHERE uname LIKE '$this->uname';";
                        
    $query = new query($sql);
                        
    $queried $query->fetch();
                        
                        
    $this->uid        $queried['uid'];
                        
    $this->fname    $queried['fname'];
                        
    $this->lname    $queried['lname'];
                        
    $this->mail        $queried['mail'];
                        
    $this->ip        $ip;
                        
    $this->loggedin    true;
                        
                        
    $_SESSION['user'] = serialize($this);
                        return 
    true;
                        }
                    else
                        {
                        return 
    false;
                        }
                    }
                }
            }

        function 
    logout()
            {
            include(
    'config.php');
            if(
    session_destroy())
                {
                
    $iptime time();
                
    $sql "UPDATE $usertbl Set ip = '0', iptime = '$iptime' WHERE
    uname = '
    $this->uname'";
                
    $update_ip = new query($sql);
                return 
    true;
                }
            else
                {
                return 
    false;
                }
            }
        function 
    security()
            {
            include(
    'config.php');
            
    #update der ip in der DB (falls iptime länger als 20min her wird ip auf 0 gesetzt)
            
    $lifetime time()-1200;
            
    $sql "SELECT uid FROM $usertbl WHERE ip != '0' AND iptime <= '$lifetime';";
            
    $query = new query($sql);
            
    $todo = array();
            while (
    $row $query->fetch())
                {
                
    array_push($todo$row['uid']);
                }
            
    $sql "UPDATE $usertbl SET ip = '0' WHERE";
            
    $counted count($todo);
            
    $i='1';
            foreach(
    $todo as $todo)
                {
                
    $sql .= " uid = '$todo'";
                if(
    $i<$counted)
                    {
                    echo 
    " OR";
                    }
                
    $i++;
                }
            
    $sql .= ";";
            
    $update = new query($sql);
            
    #Wenn letzte Aktion länger als 20min her
            
    $sql "SELECT ip FROM $usertbl WHERE
    uid LIKE '
    $this->uid';";
            
    $query = new query($sql);
            while(
    $row $query->fetch())
                {
                if(
    $row['ip']=='0')
                    {
                    if(
    $this->logout())
                        {
                        echo 
    "<SCRIPT type=\"text/javascript\" language=\"javascript\">
    location.replace('index.php?view=************p');
    </SCRIPT>"
    ;
                        }
                    }
                }
            
    #Wenn User-Ip anders als in obj user
            
    $ip getenv("REMOTE_ADDR");
            if(
    $this->loggedin AND $ip!=$this->ip)
                {
                if(
    $this->logout())
                    {
                    echo 
    "<SCRIPT type=\"text/javascript\" language=\"javascript\">
    location.replace('index.php?view=sec');
    </SCRIPT>"
    ;
                    }
                }
            }

    Soweit zu den relevanten Code-Schnipsel..

    Die Klasse query habe ich nur zur einfacheren Handhabung diverser Datenbankfunktionen erstellt...

    Und nun zum Fehler..
    Klickt man nun mit den richtigen Daten auf login, so wird folgender Fehler angezeigt:
    Code:
    object(__PHP_Incomplete_Class)(9) {
    ["__PHP_Incomplete_Class_Name"]=>  string(4) "user"
    ["uid"]=>  string(1) "1"
    ["uname"]=>  string(5) "admin"
    ["fname"]=>  string(9) "Christoph"
    ["lname"]=>  string(7) "Wanasek"
    ["mail"]=>  string(29) "christoph.wanasek@hotmail.com" 
    ["activated"]=>  bool(true)
    ["ip"]=>  string(13) "62.47.143.226"
    ["loggedin"]=>  bool(true)
    }
    
    
    Fatal error: Unknown(): The script tried to execute a method or access a property of an
    incomplete object. Please ensure that the class definition user of the object you are trying to
    operate on was loaded _before_ the session was started in
    /home/www/maxdj.freehostia.com/index.php on line 17
    Wobei die eigendliche Fehlerausgabe erst mit "Fatal error: Unknown():..." beginnt da zuvor lediglich die Session mittels var_dump() ausgegeben wird...

    Sollte jemand von euch Anregungen haben woran es liegen könnte dann meldet euch doch bitte..
    Also die Fehlerausgabe verstehe ich doch so weit allerdings finde ich nichts diesbezügliches finden..

    Also Ich wäre euch sehr dankbar für jegliche Hilfe!!!

    Danke (schon im Vorraus)!!!
    Lg
    Woeps
    Zuletzt geändert von woeps; 18.06.2006, 21:22.

  • #2
    Re: Script läuft auf Localhost Einwandfrei -&gt; Server Problembehaftet (OOP)

    Bitte Regeln lesen, und Code auf eine akzeptable Breite herunterbrechen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Check mal deine php.ini und such mal nach session.auto_start ... Auf off setzen, apache restarten und nochmals versuchen.
      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        Original geschrieben von hhcm
        Check mal deine php.ini und such mal nach session.auto_start ... Auf off setzen, apache restarten und nochmals versuchen.
        Die Klasse muss einfach nur vor session_start deklariert werden

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Vielen Dank für die schnellen Antworten!
          (@Admin: sry; hatte die Überbreite übersehen)

          Allerdings hat mir das alles nicht wirklich weitergeholfen..
          session.auto_start ist bei mir eigendlich normalerweise immer auf 'off' und dem ist auch jetzt so..

          Der Vorschlag, die Klassen vor der Session zu deklarieren hatte leider auch keinen Erfolg..

          Hab' jetzt meine Skripten auch noch auf einem anderen Lokalem Server getestet (dieses mal wie folgt: Server: "Micrososft Internet Information Server"; Php: 5.0.0; mySQL: 5.?.?)..

          Trotzdem funktionieren meine Skripten lokal einwandfrei!
          Doch kaum probiere ich diese online auf einem (free Host [test]-) Server, so treten immer die genannten Fehler auf..!

          Hat noch irgendjemand anders (oder natürlich auch wieder jemand von euch 2/3) eine weitere Idee?!?

          Hoffe es kann mir vielleicht doch noch jemand hier helfen und ich kann das Mysterium meiner Fehler durchleuchten..!!!

          Nochmals Danke! schon im Vorraus für folgende Hilfestellungen und für bereits getane..

          THX
          Woeps!

          Kommentar


          • #6
            Original geschrieben von woeps
            Nochmals Danke! schon im Vorraus für folgende Hilfestellungen und für bereits getane..
            ich danke im voraus für das unverzügliche editieren deines eingangspostes
            auf eine breite, die auch bei einer 1024er auflösung keines querscrollens
            bedarfs. dazu hat man im forum den nützlichen "ändern-button" unterhalb
            eines jeden postes gleich mit eingefügt. danke für die befolgung dieses
            letztmaligen aufrufes.
            Kissolino.com

            Kommentar


            • #7
              ...sooo... @Mod: besser gehts nicht mit der "Breiten-Anpassung" (bzw. mehr Mühe werde ich mir jetzt nicht mehr machen)
              anscheinend hat hier leder sowieso niemand mehr einen Rat für mich..
              schade..; hatte gehofft ich könnte den Fehler noch finden und ausbessern, ohne alles neu schreiben zu müssen..

              Also sollte vielleicht doch noch jemand eine Idee haben--> Dann bitte melden!...

              Danke!

              Kommentar


              • #8
                Fatal error: Unknown(): The script tried to execute a method or access a property of an
                incomplete object. Please ensure that the class definition user of the object you are trying to
                operate on was loaded _before_ the session was started in
                /home/www/maxdj.freehostia.com/index.php on line 17
                Der Vorschlag, die Klassen vor der Session zu deklarieren hatte leider auch keinen Erfolg..
                Das ist aber der Punkt - dein "include('class/userclass.php');" muss vor "session_start()" stehen.
                Mehr fällt mir momentan auch nicht dazu ein.

                Dass du sowenig Antworten bekommst, liegt vermutlich an der Menge von Code den du gepostet hast, so ist es schwer, einen Überblick zu bekommen.

                Gruß,
                ministry
                ich glaube

                Kommentar


                • #9
                  vielleicht hilft dir das weiter:
                  http://bugs.php.net/bug.php?id=29985
                  Kissolino.com

                  Kommentar


                  • #10
                    Du hast ja gar keine Objekte in der $_SESSION, sondern un/serialisierst selber. Erst
                    das serialisierte Ding ist in der Session. Man könnte als nach dem serialisierungspunkt
                    serialize($this) sehen, was dort in die Session geht.

                    Vielleicht geht irgendwo $user doch noch in die $_SESSION?
                    Könnte es sein, dass session_start() das von dir serialisierte, selber unserialisiert,
                    weil es nicht unterscheiden will?

                    Als Austricks könntest Du das serialisierte in $_SESSION['user2'] abspeichern, und/oder base64 codieren.

                    offtopic: echo ' OR';
                    Zuletzt geändert von mai; 19.06.2006, 00:48.

                    Kommentar


                    • #11
                      Ein selbst serialisiertes objekt , siehe deine login-methode, sieht anders aus als
                      deine Ausgabe und würde, in php5, von der Sessionverwaltung auch nicht
                      automatisch entserialisiert (mein Verdacht s.o.).
                      Beispiel:
                      $aa=serialize($aobject);
                      var_dump($aa);
                      string(60) "O:5:"daten":2: {s:1:"a";s:7:"Inhalta";s:1:"b";s:7:"Inhaltb";}"

                      in php5 habe ich die class Deklaration nicht vor session_start(), sondern
                      konnte sie bis an den Schluss des skripts platzieren...


                      In deinem Programm würde also $_SESSION['user'], ursprünglich ein string, mit einem object überschrieben,
                      und die nächste Frage ist, wo und warum?

                      Kommentar


                      • #12
                        als erstes entschuldigt bitte das ich mich jetzt erst melde und als zweites gleich mal:
                        Vielen Dank für eure Bemühungen!!!

                        Ich werde jetzt nochmal den Code mit euren Letzten Hilfestellungen versuchen und wenn das auch nicht funktioniert werde ich wohl alles neu / anders schreiben müssen..

                        Also nochmals vielen Dank für eure Hilfe!!!

                        Auch wenn ich wahrscheinlich alles neu schreiben werde, da ich langsam die Geduld beim Fehlersuchen verliere..

                        alo Thx
                        Woeps

                        Kommentar

                        Lädt...
                        X