Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 34
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [OOP] usare metodo in classe extends

    database.php
    Codice PHP:
        // eseguire una query
        
    public function execute($sql) {
            if(
    $this->mysqli->query($sql)) 
                        return 
    $this->mysqli->query($sql);
                    else 
                        return 
    false;
        }

        
    // numero di righe restituire da una query
        
    public function num_rows($sql) {
            
    $result $this->execute($sql);

            return 
    $result->num_rows;
        } 
    utente.php
    Codice PHP:
    class Utente extends Database {
    ...

        public function 
    checkUser($sql) {
            
    $result $this->execute($sql);
            if (
    $result){
                if (
    $result->num_rows == 1)
                    return 
    true;
                else
                    return 
    false;
            }
        }
    ...

    index.php
    Codice PHP:
    ...
    if(
    $login->checkUser($query))
    echo 
    "ok";
        else
    echo 
    "errore";
    ... 

    Premetto che la query è esatta e i metodi usati in database funzionano, però qualora tento di usare il metodo execute che ho in Database nella classe Utente, mi dà l'errore.

    Ho il seguente errore:
    Trying to get property of non-object

    Come posso risolvere?
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Qui sembra che il problema è un altro
    $login non è proprio un oggetto, non è stata correttamente istanziata in precedenza

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Codice PHP:
    $login = new Utente
    eppure, gli altri metodi di Utente funzionano alla perfezione.
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Prova intanto a correggere la funzione in modo che restituisca SEMPRE un risultato
    Come l'hai scritta tu, nel caso $result sia false, non restituisce nè True nè False

    Anche se non credo sia questo il problema... visto che il messaggio è piuttosto chiaro, nel momento in cui fa la if ( $login->checkUser( $query) ), $login non è ancora (o non è più) un oggetto

    A meno che non si riferisca alla variabile $result

    Secondo me il problema è il modo in cui utilizzi/confondi la proprietà "num_rows" con il metodo "num_rows"

    Probabilmente la tua funzione funzionerebbe così
    Codice PHP:
    public function checkUser($sql) {
            if (
    $this->num_rows$sql ) ){
                    return 
    true;
                else
                    return 
    false;
             }
        } 

  5. #5
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Con una query esatta(testata) , con o senza l'else che dicevi tu, mi stampa a video sempre e solo errore
    Con i sogni possiamo conoscere il futuro...

  6. #6
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Originariamente inviato da Leilond

    A meno che non si riferisca alla variabile $result

    Secondo me il problema è il modo in cui utilizzi/confondi la proprietà "num_rows" con il metodo "num_rows"
    Io ho il seguente metodo:

    Codice PHP:
        public function num_rows($sql) {
            
    $result $this->execute($sql);

            return 
    $result->num_rows;
        } 
    e funziona benissimo, cioè mi restituisce correttamente il numero di righe ottenute da una select, il problema è quando utilizzo il tutto all'interno della classe Utente, ora non mi dà più l'errore che ho postato all'inizio, ma mi stampa solo e sempre errore, cioè e come se:

    if($result) non fosse mai vero, eppure la query è corretta.
    Con i sogni possiamo conoscere il futuro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Prova a modificare il tuo metodo così
    Codice PHP:
      public function checkUser($sql) {
            if (
    $this->num_rows$sql ) ){
                    return 
    true;
                else
                    return 
    false;
            }
        } 

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Questa funzione inoltre è sbagliata
    Codice PHP:
       public function num_rows($sql) {
            
    $result $this->execute($sql);

            return 
    $result->num_rows;
        } 
    Poichè se il query $sql fosse formalmente sbagliato, il risultato di execut sarebbe FALSE (per come hai scritto execute all'inizio del post) e su un valore FALSE non puoi usare l'istruzione $result->num_rows;
    La funzione corretta sarebbe
    Codice PHP:
       public function num_rows($sql) {
            
    $result $this->execute($sql);
            if ( 
    $result ) {
              return 
    $result->num_rows;
            } else {
              return 
    0// oppure false
            
    }
        } 

  9. #9
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Adesso il problema me lo dà qui:
    Codice PHP:
        public function num_rows($sql) {
            
    $result $this->execute($sql);

            return 
    $result->num_rows;
        } 
    precisamente la riga del return
    Con i sogni possiamo conoscere il futuro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Originariamente inviato da gaten
    Adesso il problema me lo dà qui:
    Codice PHP:
        public function num_rows($sql) {
            
    $result $this->execute($sql);

            return 
    $result->num_rows;
        } 
    precisamente la riga del return
    Come ti ho scritto al post precedente, la funzione EXECUTE può restituirti FALSE e quindi, se questo è il caso, l'istruzione "return $result->num_rows;" va ovviamente in errore, perchè stai tentando di reperire la proprietà num_rows da una variabile che non è un oggetto, ma il valore false
    Riscrivi la funzione così
    Codice PHP:
        public function num_rows($sql) {
            
    $result $this->execute($sql);
            if ( 
    $result ) {
              return 
    $result->num_rows;
            } else {
              return 
    0// oppure false
            
    }
        } 

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.