Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14

    Fatal error: Call to a member function estrai() on a non-object in

    Ciao a tutti,
    prendendo spunto da un utilissimo articolo di php.html.it ho cominciato ad utilizzare le classi e gli oggetti per la gestione del mio DB.
    Il login funziona correttamente.
    Mi da problemi invece quando gli chiedo di farmi una query più complessa.
    In pratica devo fare l'elenco di alcuni record e dopo avermi visualizzato il primo record mi viene fuori:

    codice:
    Fatal error</b>:  Call to a member function estrai() on a non-object in
    Il mio file che gestisce il db è il seguente:

    codice:
    class MysqlClass {
    
    
        // variabili per la connessione al database
        public $nomehost = "localhost";
        public $nomeuser = "root";
        public $password = "";
        public $nomedb = "intranet";
        // controllo sulle connessioni attive
        public $attiva = false;
    
    
        // funzione per la connessione a MySQL
        public function connetti() {
            if (!$this->attiva) {
                if ($connessione = mysql_connect($this->nomehost, $this->nomeuser, $this->password) or die(mysql_error())) {
                    $selezione = mysql_select_db($this->nomedb, $connessione) or die(mysql_error());
                }
            } else {
                return true;
            }
        }
    
    
    //funzione per l'esecuzione delle query 
        public function query($sql) {
            if (isset($this->attiva)) {
                $sql = mysql_query($sql) or die(mysql_error());
                return $sql;
            } else {
                return false;
            }
        }
    
    
    //funzione per l'inserimento dei dati in tabella
        public function inserisci($t, $v, $r = null) {
            if (isset($this->attiva)) {
                $istruzione = 'INSERT INTO ' . $t;
                if ($r != null) {
                    $istruzione .= ' (' . $r . ')';
                }
    
    
                for ($i = 0; $i < count($v); $i++) {
                    if (is_string($v[$i]))
                        $v[$i] = '"' . $v[$i] . '"';
                }
                $v = implode(',', $v);
                $istruzione .= ' VALUES (' . $v . ')';
    
    
                $query = mysql_query($istruzione) or die(mysql_error());
            }else {
                return false;
            }
        }
    
    
    //funzione per l'estrazione dei record 
        public function estrai($risultato) {
            if (isset($this->attiva)) {
                $r = mysql_fetch_object($risultato);
                return $r;
            } else {
                return false;
            }
        }
    
    
    // funzione per la chiusura della connessione
        public function disconnetti() {
            if ($this->attiva) {
                if (mysql_close()) {
                    $this->attiva = false;
                    return true;
                } else {
                    return false;
                }
            }
        }
    
    
    }
    Poi ho una mia pagina così composto dove richiamo il file sopra citato e istanzio la classe:

    codice:
    <?phpsession_start();
    // inclusione del file di classe
    include "funzioni_mysql.php";
    
    // istanza della classe
    $data = new MysqlClass();
    global $data;
    
    ?>
    
    ..... CODICE HTML .....
    
    <?php
    $data->connetti();
    $querySql = "SELECT richiestaintervento.titolo AS titolo, "
       . "richiestaintervento.aperto AS aperto, "
       . "richiestaintervento.rapportino AS rapportino, "
       . "richiestaintervento.utenteRichiedente, "
       . "richiestaintervento.dataApertura AS data, "
       . "richiestaintervento.tipologia, "
       . "tipologia.descrizione AS tipologia, "
       . "luogo.descrizione AS luogo "
       . "FROM "
       . "richiestaintervento "
       . "INNER JOIN "
       . "tipologia "
       . "ON "
       . "richiestaintervento.tipologia = tipologia.id "
       . "INNER JOIN "
       . "luogo "
       . "ON "
       . "richiestaintervento.luogo = luogo.id "
       . "WHERE "
       . "richiestaintervento.tipologia = "
       . "(SELECT utentitipologia.tipologia FROM utentitipologia "
       . "WHERE username = '" . $_SESSION['login'] . "') "
       . "AND richiestaintervento.aperto=0 "
       . "ORDER BY richiestaIntervento.dataApertura DESC";
    
    
       $sql_cerca = $data->query($querySql);
    
    
       $trovati = mysql_num_rows($sql_cerca);
    
    
       if ($trovati > 0) {
           while ($cerca_obj = $data->estrai($sql_cerca)) {
                $data = $cerca_obj->data;
                $tipologia = stripslashes($cerca_obj->tipologia);
                $luogo = stripslashes($cerca_obj->luogo);
                $motivo = stripslashes($cerca_obj->titolo);
    
    
                // visualizzazione dei dati
                echo "<tr>\n";
                echo "<th>" . $data . "</th>\n";
                echo "<th>" . $tipologia . "</th>\n";
                echo "<th>" . $luogo . "</th>\n";
                echo "<th>" . $motivo . "</th>\n";
                echo "</tr>";
           }
        }
    
    
    // disconnessione
    $data->disconnetti();
    ?>
    Grazie mille.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Succede perché dentro il ciclo while sovrascrivi la classe $data con il contenuto di ciò che tiri fuori dal db

    while ($cerca_obj = $data->estrai($sql_cerca)) {
    $data = $cerca_obj->data; //qui sovrascrivi l'oggetto su cui devi ciclare, quindi al secondo giro non è ciò che dovrebbe essere

  3. #3
    All'interno dei while sovrascrivi la variabile data:

    Codice PHP:
    ...
    while (
    $cerca_obj $data->estrai($sql_cerca)) {
        
    $data $cerca_obj->data;
    ... 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14


    chiedo scusa... E' da due giorni che provo a cercare... Come sempre è la distrazione il peggior nemico...

    Grazie mille.

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.