Prbleme bei Referenz von Objekten

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

  • Prbleme bei Referenz von Objekten

    Also ich habe schon die Suchfunktion bemüht und einiges über Referenzen gelesen und die Fehler soweit ausgemerzt, allerdings habe ich nun ein kleines Problem, bei den Klassen.
    Ich habe ein hübsches kleines Websiteskript, eine Klasse für meine Datenbank und eine Klasse die meinen ganzen Loginkram enthält.
    In der Login-Klasse würde ich nun gern auch das DB-Objekt aus dem Skript nutzen. Das ganze sieht folgendermaßen aus.

    index.php
    PHP-Code:
    <?php 
        
    require_once "inc/class_mydbc.inc.php"//Bibliothek für Datenbankfunktionen
        
    require_once "inc/class_mysmc.inc.php"//Bibliothek für Loginfuntkionen

        
    $myDB = new myDBC($cfg['db']);    
        
    $mySM = new mySMC($myDB);

        ....
    ?>
    class_mysmc.inc.php
    PHP-Code:
    class mySMC
    {
        var 
    $_myDB

        
    function mySMC(&$ref_myDB)
        {
            ....

            
    $this->_myDB = &$ref_myDB;
     
            ....
        }

        function 
    login($username$passwort$md5 FALSE)
        {
            
    $sql "SELECT 
                        user_id, 
                        user_accstatus,
                        session_ip,
                        session_failed_logins,
                        (NOW()-session_last_action) as session_idle
                    FROM 
                        "
    .TAB_PREFIX."_user,
                        "
    .TAB_PREFIX."_session 
                    WHERE
                        user_name = '"
    .$username."' 
                    AND user_password = '"
    .$password."'
                    AND user_id = session_user_id"
    ;

            
    $ergebnis $this->_myDB->query($sql);
            if(
    mysql_num_rows($ergebnis) != 1)
            {
                 ....
            }
        }
        ....

    Das Problem was ich nun habe ist, das die Variable $ergebnis in der Methode Login nichts enthält. Sie ist leer, was heißt das das Referenzkonstrukt irgendwo einen Fehler hat. Ich dachte eigentlich die Theorie die sich hinter den Referenzen verbirgt verstanden zu haben, allerdings hab ich nun schon so einiges probiert, aber finde den Fehler einfach nicht.

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in [...]\inc\class_mysmc.inc.php on line 110 Diese Fehlermeldung bekomme ich zurück, sobald die if-Schleife erreicht ist. Eigentlich ja auch logisch, da mysql_num_rows nichts übergeben bekommt, aber das warum versteh ich nicht.
    Zuletzt geändert von virusse; 26.02.2005, 13:43.

  • #2
    Meinst du nicht anstatt

    $ergebnis = $this->-myDB->query($sql);

    eher

    $ergebnis = $this->_myDB->query($sql);


    ?

    Und was steht denn in der Übergebenen variable drinne? was sagt z.B. gettype()?
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Re: Prbleme bei Referenz von Objekten

      Oh man! Scheiße wenn man nicht lesen kann. Quote statt Edit.
      Also den Unterstrich hab ich stehen ist nur nen Schreibfehler. gettype() sagt es wäre Boolean, aber dann müsste sie ja entweder 0 oder 1 enthalten? So langsam zweifel ich an meinen Fähigkeiten hier.
      Zuletzt geändert von virusse; 26.02.2005, 13:52.

      Kommentar


      • #4
        und wie sieht query() in deiner db-class aus?
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Die sieht so aus.

          class_myDBC.inc.php
          PHP-Code:
          class myDBC
          {
              var 
          $_db = array
              (
          'host' => NULL,
               
          'user' => NULL,
               
          'pass' => NULL,        
               
          'name' => NULL,
               
          'tabp' => NULL,
                
          'link' => NULL
              
          );
              var 
          $_errors = array();
              var 
          $_sql = array();   
             
              function 
          myDBC($conndata '')
             {
                  ....
             }
              
              function 
          query($sql "")
              {
                  if(empty(
          $sql))
                  {
                      
          $this->_add_error('DB Query',2,'kein Anfragestring');
                      return 
          FALSE;
                  }
                  if(empty(
          $this->_db['link']))        
                  {
                      
          $this->_add_error('DB Query',3,'keine Verbindung zur DB');
                      return 
          FALSE;
                  }
                  
          $results mysql_query($sql,$this->_db['link']);
                  
                  if((!
          $results))
                  {
                      
          $this->_add_error('DB Query',4,'Keinen Datensatz gefunden oder Anfrage un&uuml;ltig');        
                      return 
          FALSE;
                  }
                  
          $this->_add_sql($sql);        
                  return 
          $results;
              }
               
               ....

          Kommentar


          • #6
            mysql_error() sehe ich hier nirgendwo ... ist das absicht, dass du keine fehler angezeigt haben willst?

            und noch was ... warum willst du das result aus der db-class herausgeben?
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              mysql_error() hab ich nicht drin, weils mir ja so oder so angezeigt wird. Hab dann immer ne Dicke Fehlermeldung überm Dokument stehen.
              Zu dem rausgeben. Ich habe hier das Forum schon auf den Kopf gestellt und mir einige DB-Classen dazu angeschaut wo man immer diskutiert hat, das da eigentlich nur Verbindungsauf- / -abbau sowie die Query Funktion drin stehen sollte und der Rest wohl sinnlos sei. Zumindest hab ich das so verstanden
              Um nun festzustellen was bei der Anfrage rauskam und es für die mysql-Funktionen zu nutzen muss ich also eine Rückgabe machen. Aber ich lass mir da auch gern noch etwas erzählen, weil ich wills ja lernen und da jeder was anderes sagt ist das nicht immer einfach, die günstigste / gebräuchlichste Lösung zu finden.

              Kommentar


              • #8
                grundsätzlich gilt bei classen immer, dass alles was dazu gehört auch IN DER CLASS abgefrühstückt werden sollte.

                meine mysql-class macht das z.b. alles intern.

                hier mal ein paar methoden als anregung.

                connect()
                select_db()
                query()
                get_rows()
                fetch()
                get_field()
                gell_all_fields()
                get_errors()

                usw.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Meine Klasse besitzt nicht soviel Umfang.

                  Ich habe bis jetzt darin implementiert:

                  connect()
                  disconnect()
                  query()
                  get_errors()

                  Also ist es besser nur noch die "Abfrage-Daten" nach oben zu geben? Dann werd ich die Klasse nochmal erweitern und nochmal schauen. Vielleicht löst sich ja das Referenz-Problem von allein. Danke für die Hilfe

                  Kommentar


                  • #10
                    hier mal was als anregung für deine class ....

                    PHP-Code:
                    // das ist aus meiner gb-class zum anzeigen der daten.
                    function gb_show()
                    {
                        
                    $this->db->query('SELECT * FROM guestbook');
                        if (
                    $this->db->get_rows()==0)
                        {
                            
                    $this->smarty->assign('content_errors''keine Einträge vorhanden ...');
                            return;
                        }

                        
                    $data = array();
                        while(
                    $this->db->fetch())
                            
                    $data[] = $this->db->get_all_fields();

                        
                    // werte an smary geben.
                        
                    $this->smarty->assign('guestbook'$data);

                    PHP-Code:
                    // und das ist was einfaches, um auch get_field() zu zeigen.
                    function easy_show()
                    {
                        
                    $this->db->query('SELECT hans, wurst FROM irgendwo');
                        
                        while(
                    $this->db->fetch())
                        {
                            
                    // ein echo macht man natürlich nicht in einer class.
                            // das ist hier nur zur demo gedacht ....
                            
                    echo $this->db->get_field('hans');
                            echo 
                    $this->db->get_field('wurst');
                        }

                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar

                    Lädt...
                    X