Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    18

    [PHP-ERROR]Call to a member function on a non-object

    Salve a tutti,
    non mi ritengo un gran programmatore, ma solitamente riesco sempre a cavarmela con l'aiuto di Google e un pizzico di intuizione, ma da due giorni mi trovo davanti ad un problema di cui non riesco ad afferrare la vera natura.

    Ho strutturato un sito in modo che ci siano due classi che contengono tutti i metodi necessari all'amministrazione dei contenuti visuali (immagini) e di testo del mio sito, e del loro passaggio fra database e pagina. La parte grafica usa queste classi per recepire i dati, mentre queste due classi si appoggiano ad una classe che ho scritto per gestire il mero collegamento con mysql.

    Il problema che sto riscontrando quando vado a cercare di eseguire le pagine è il seguente:
    Fatal error: Call to a member function query() on a non-object in [..]monicacecchin/data/class/tele.php on line 155

    normalmente cercherei di capire perchè php è convinto che l'oggetto che gli passo non sia effettivamente un oggetto, ma essendo una variabile dichiarata all'inizio della classe, che usano altri metodi prima della riga 155 mi domando: cosa c'è di diverso?
    Mi da lo stesso errore in entrambe le classi, e non riesco a capire il perchè.

    Nel caso della classe teleTesti (in basso) lo stesso paramentro è utilizzato in dunzioni diverse, ma è nella seconda funzione a generare errore. (param: $dbLink)

    Allego codice della classe mysql e di quella più breve delle due, vi ringrazio immensamente per il tempo che dedicherete e per le risposte che mi darete! grazie ancora!
    Gino


    Codice PHP:
       class MysqlClass
       
    {
          
    //Parametri per la connessione al database
          
    private $nomehost;
          private 
    $nomeuser;
          private 
    $password;
          private 
    $nomedb;
          private 
    $mysqli;
          
    //variabile di controllo delle connessioni attive
          
    private $attiva;
          private 
    $arry;
          
          public function 
    __construct()
          {
              
    $attiva false;
              
    $nomehost $GLOBALS['host'];
              
    $nomeuser $GLOBALS['user'];
                
    $password $GLOBALS['pswd'];
                
    $nomedb $GLOBALS['db'];
              
    $mysqli = new mysqli($nomehost$nomeuser$password$nomedb);
              
    $this->connetti();
          }
          
    //funzione di connessione
          
    private function connetti()
          {
              if (
    mysqli_connect_errno()) {
               
    // notifica in caso di errore
                    
    echo "Errore in connessione al DBMS: ".mysqli_connect_error();
               
    // interruzione delle esecuzioni i caso di errore
                        
    exit();
              }
              
              return 
    $this->attiva;
          }
          
    //funzione di disconnessione
          
    public function disconnetti()
          {
              if(
    $this->attiva)
              {
                  if(
    $mysqli->close())
                  {
                      
    $this->attiva false;
                      return 
    true;
                  }
              }
              return 
    false;
          }
          
    //Passaggio della variabile di connessione
          
    public function var_con()
          {
              if(
    $this->attiva)
              {
                  return 
    $connessione;
              }
              return 
    false;
          }
          public function 
    fetch()
          {
               
    $result $this->arry->fetch_array(MySQL_BOTH);
               return 
    $result;
          }
          
    //funzione query
          
    public function query($query$fetch)
          {
              
    $this->arry $mysqli->query($query) or die("Error: q: ".$query." \./ ".$mysqli->sqlstate);
              if(
    $fetch
              {
                  
    $result=$this->fetch(); 
                  return 
    $result;
              }
              return 
    false;
          }  
       } 

    Codice PHP:

    class teleTesti
    {
        private 
    $dbLink;
        private 
    $data;
        
        public function 
    __construct()
        {
            
    $dbLink = new MysqlClass();
        }
        
        
        public function 
    editTesti($id$section$lang$text)
        {
            
    $dbLink->query("UPDATE tele SET $lang=$text WHERE section=$section LIMIT 1"false);
            return 
    true;
        }
        
        public function 
    listTesti($section$language)
        {
            
    $data=$dbLink->query("SELECT $language FROM testi WHERE section='$section' LIMIT 1",true);
            return 
    $data;
        }
        
        public function 
    addLang($lang)
        {
            
    $dbLink->query("ALTER TABLE `testi` ADD `$lang` TEXT NOT NULL");
        }        


  2. #2
    è possibile vedere il codice alla riga 155 del doumento tele.php??
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    18
    si anche se in realtà lo stesso errore lo da su questa riga della classe teleTesti

    Codice PHP:
    $data=$dbLink->query("SELECT $language FROM testi WHERE section='$section' LIMIT 1",true); 
    ad ogni modo, la riga 155 è
    Codice PHP:
            $data $this->dbLink->query($querytrue); 
    nella funzione:
    Codice PHP:
    private function listTela_query($query)
        {
            
    $data $this->dbLink->query($querytrue);
            
    $dataArray = array();
            
    $arrayRow = -1;
            while(
    $data)
            {
                
    $arrayRow += 1;
                
    $dataArray[$arrayRow] = $data;
                echo 
    $data." \n\r ";
                
    $data $dbLink->fetch();                
            }
            
            return 
    $dataArray;
        } 
    dove $dbLink è dichiarato in testa alla classe e poi inizializzato nel costruttore, e ad ogni modo come dicevo è già usata come variabile (allos tesso modo) nelle righe precedenti
    (potrei pubblicare anche tutto tele.php, ma avevo messo l'altra classe percchè dava los tesso errore ed era più breve)

    l'inizializzazione di classe e variabile cmq è:
    Codice PHP:
    class leTele
    {
        private 
    $dbLink;
        public 
    $arrayRow;
        private 
    $dataArray;
        
        public function 
    __construct()
        {
            
    $dbLink = new MysqlClass();
            
    $arrayRow = -1;
            
    $dataArray = array();
        }
    ............. 
    p.s. anche togliendo il $this-> non cambia, ero indeciso se ci va o meno...

  4. #4
    Ok, questo codice non fa niente per la classe leTele:

    Codice PHP:
    public function __construct()
        {
            
    $dbLink = new MysqlClass();
            
    $arrayRow = -1;
            
    $dataArray = array();
        } 
    le tre variabili che popoli all'interno del costruttore sono inutili per la classe stessa.

    Per averle disponibili all'interno della classe le devi usare come proprietà della classe:
    Codice PHP:
    class leTele
    {
        private 
    $dbLink;
        public 
    $arrayRow = -1;
        private 
    $dataArray = array();
        
        public function 
    __construct() {
            
    $this->dbLink = new MysqlClass();
        }

        private function 
    listTela_query($query) {
            
    $data $this->dbLink->query($querytrue);
            while(
    $data)
            {
                
    $this->arrayRow += 1;
                
    $this->dataArray[$this->arrayRow] = $data;
                echo 
    $data." \n\r ";
                
    $data $this->dbLink->fetch();                
            }
            
            return 
    $this->dataArray;
        } 
    Questa volta, più che un voto.. è favoreggiamento.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    18
    ora provo!

    grazie mille!!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    18
    Grazie mille!!
    quindi, per completezza di comprensione, tutte le variabili andrebbero inizializzate all'esterno del costruttore, nel caso delle classi o di assegnazioni di variabili globali lo faccio all'interno del costruttore richiamandoli però con il punttore $this->nomevariabile, è corretto?
    Comunque grazie mille, questo errore mi stava veramente bloccando!

  7. #7
    Originariamente inviato da Growl88
    Grazie mille!!
    quindi, per completezza di comprensione, tutte le variabili andrebbero inizializzate all'esterno del costruttore
    No:
    Codice PHP:
    class classe {
      private 
    $prop;

      public function 
    __construct() {
        
    $this->prop = array();
      }
    }

    class 
    classe2 {
      private 
    $prop = array();

      public function 
    __construct() {
      }

    queste due classi fanno la stessa cosa ma la seconda è più "elegante", se devi assegnare un valore di default ad una proprietà lo puoi fare quando dichiari la proprietà..

    nel caso delle classi o di assegnazioni di variabili globali lo faccio all'interno del costruttore
    se devi valorizzare una proprietà, nel momento in cui istanzi la classe, con un valore che non sia "di default":

    Codice PHP:
    class classe {

      private 
    $prop;

      public function 
    __constructdb $db ) {
        
    $this->prop $db;
      }

      
    // oppure
      
    public function __construct() {
        
    $this->prop = new db();
      }

      
    // oppure
      
    public function __construct$str '' ) {
        
    $this->prop 'Ciao ' $str;
      }

    richiamandoli però con il punttore $this->nomevariabile, è corretto?
    il puntatore $this-> ti permette di usare la proprietà all'interno della classe in qualsiasi metodo
    Codice PHP:
    class classe {

      private 
    $prop;

      public function 
    __constructdb $db ) {
        
    $this->prop $db;
      }

      public function 
    fetch() {
        
    $data $this->prop->fetch();
        return 
    $data;

        
    // mentre questo non funziona perchè $prop non è valorizzata
        
    $data $prop->fetch();
      }

    http://www.php.net/manual/en/language.oop5.basic.php
    http://www.php.net/manual/en/languag...properties.php
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    18
    Grazie mille, chiarissimo!
    buona domenica!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.