Existenz von Objekten

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

  • Existenz von Objekten

    Hallo Leute

    ich versuche mich gerade mit PHP-Objekten. Folgenes Szenario: Ich habe 3 Dateien index.php, config.php, und regform.php. In der config.php gibts ne Klasse content und in der Klasse content gibts ne public function query mit der ne MySQL Datenbank abgefragt wird. In der index includiere ich die config.php.Mit $cont = new content wird in der index.php ein neues Objekt erstellt. Danach includiere ich die regform.php in die index.php und möchte da die function query aufrufen $cont ->query("SELECT * FROM test WHERE name = \"Daniel\"");.
    Das klappt aber nicht denn folgender Fehler kommt: Fatal error: Call to a member function query() on a non-object in D:\regform.php on line 16. Daraus entnehme ich das es das Objekt $cont was in der index.php angelegt wurde in der regform nach dem include nicht mehr gibt. Wenn ich in der regform.php das Qbjekt neu anlegen will geht das aber auch nicht denn Fatal error: Cannot redeclare class content in D:\config.php on line 2. Selbst wenn ich einen anderen Namen verwende passiert das gleiche.
    Wie muss ich die Klasse gestalten beziehungsweise das Objekt erstellen damit ich dieses in jeder anderen includierten Datei verwenden kann?

  • #2
    Vielleicht zeigst du lieber mal den echten Quelltext her statt versuchen zu zitieren und dabei Quatsch zu erzählen. Und vorweg: Nimm HTML-Gedrisse direkt raus.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      http://php.net/is_object
      http://php.net/method_exists
      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


      • #4
        PHP-Code:
        $cont = new content 
        ... so erzeugst Du ein Objekt? Glaub ich nicht!
        Ich weiss nicht wie Deine Klasse aufgebaut ist,
        aber es sollte mindestens so ...

        PHP-Code:
        $cont = new content(); 
        ... aussehen!
        Erwartet das Objekt keine Parameter?
        Wie unset schon sagte, ohne Quellcode wirds schwierig!

        Gruß phpfussel

        Kommentar


        • #5
          Die Variable wird in deiner regform.php sicher nicht gefunden, weil du das Objekt in einer Funktion erzeugst oder in einer Funktion nach der globalen Variablen suchst. Aber zeig doch mal einfach ein bissl Code her.

          @php_fussel: Das ist natürlich Grütze, beide Aufrufe sind gültig und führen an das gleiche Ziel.

          Kommentar


          • #6
            So also hier der Quelltext der config.php:
            PHP-Code:
            class content{
              private 
            $connection NULL;
              private 
            $result NULL;

              public function 
            connect() {
                    
            $host "localhost";
                    
            $db "test";
                    
            $user "sel";
                    
            $passw "****";
                    
                
            $this->connection mysql_connect ("$host""$user""$passw");
                    
                    if(
            $this->connection != false){
                        
            mysql_select_db("$db"$this->connection);
                    }else{
                        exit;
                    }
              }
             
              public function 
            disconnect() {
                if (
            is_resource($this->connection)) {
                  
            mysql_close($this->connection);
                }
              }
             
              public function 
            query($query,$quest) {
                    
            $this->connect();
                if (
            is_resource($this->connection)) {
                  if (
            is_resource($this->result)) {
                    
            mysql_free_result($this->result);
                  }

                  
            $this -> result mysql_query($query,$this->connection);
                        echo 
            mysql_error();
                        switch(
            $quest){
                            case 
            "assoc":
                                if (
            is_resource($this->result)) {
                                    if (
            mysql_num_rows($this->result) > 1){
                                        
            $count 1;
                                        while(
            $row mysql_fetch_assoc($this->result)){
                                            
            $ergrow[$count] = $row;
                                            
            $count++;
                                        }
                                        return 
            $ergrow;
                                    }else{
                                        
            $row mysql_fetch_assoc($this->result);
                                        if (
            is_array($row)) {
                                            return 
            $row;
                                        } else {
                                            return 
            FALSE;
                                        }
                                    }
                                }
                            break;
                            
                            case 
            "num_rows":
                                if (
            is_resource($this->result)) {
                                    
            $row mysql_num_rows($this->result);
                                    return 
            $row;
                                }
                            break;
                        }
                }
                    
            $this -> disconnect();
              } 
            In der index.php die fürs Layout zuständig ist stehen in den ersten Zeilen nur:
            PHP-Code:
            <?php
                
            include "texte/config.php";
                
            $cont = new content;
            ?>
            Dann kommt HTML.
            Da wo der Inhalt der SQL DB rein soll steht:
            PHP-Code:
            $text $cont->query("SELECT * FROM `test` WHERE name=\"Daniel\"","assoc");
            echo 
            $text["text"];
            include 
            "texte/regform.php"
            So der Inhalt der regform.php ist noch nicht großartig ausgeprägt aber es soll in der DB überprüft werden ob ein best. Name vorhanden ist.
            PHP-Code:
                    $usrindb $cont->query("SELECT user FROM `test` WHERE `user`=\"".$_POST["user"]."\"","num_rows");
                    if (
            strlen(trim($_POST["user"])) < 3  || $usrindb 0){
                        
            $fehlerfrei FALSE;
                        
            $fehleruser TRUE;

            Das Scriopt läuft bis zur Stelle der Userabfrage aus der DB. Da kommt dann die Fehlermeldung!

            Kommentar


            • #7
              @PHP-Desaster: Du hast natürlich Recht ... mir ging es mehr um das ';' .. egal!

              Vorher kennt die 'regform.php' Deine query-Funktion/Methode? Die index.php kennt die Funktion, da die config.php includiert wurde, somit kann in der index.php auch ein Objekt der Klasse erzeugt werden, die diese Methode beinhaltet. Wenn die 'regform.php' in die index.php includiert wird, dann kennt die index.php auch dessen Inhalt, aber woher kennt die 'regform.php' die Objekt-Variable $cont sowie die damit verbundene Funktion query ... ?
              Du rufst in der regform.php ein Objekt auf, das die regform.php gar nicht aufrufen kann, da sie die Klasse nicht kennt ... oder bin ich jetzt aufm Holzweg?
              Zuletzt geändert von php_fussel; 10.02.2009, 13:31.

              Kommentar


              • #8
                Original geschrieben von php_fussel
                ... oder bin ich jetzt aufm Holzweg?
                Ja, bist du vermutlich.

                Einbindung von Scriptcode per include/require ist im Normalfall nichts weiter als Copy&Paste - so, als haettest du den Code gleich selber an der entsprechenden Stelle untergebracht.
                Was den Gueltigkeitsbereich von Variablen angeht, gelten da also keine "Sonderregeln".
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar

                Lädt...
                X