Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Errore classe: Call to a member function on a non-object

    Ciao ragazzi, da poco ho iniziato ad usare le classi in php. Ecco che fin da subito iniziano gli errori

    Ho creato una classe che ha i seguenti compiti:
    - Connessione al database
    - Etrazione dei risultati
    - Conteggio delle righe
    - Chiusura del database

    Nel'header del sito, ho richiamato questa classe:
    Codice PHP:
    require("lamiaclasse.php");
    $DB = new database();
    // qui ho fatto delle query 
    Nel body della pagina, devo effettuare altre query, quindi ho pensato che siccome il file della classe è già stato richiamato, basta che continuavo ad usare l'oggetto $DB ma invece no. Se nel body scrivo
    Codice PHP:
    $DB->query("balbalbala"); 
    mi da un errore:

    Fatal error: Call to a member function on a non-object in ****** on line 27
    Autatemi!!
    Realizzazione script php/mysql, per info:
    delrossofabio@gmail.com

    http://forum.html.it/forum/showthread.php?s=&threadid=1478962

  2. #2
    Potrebbe bastare un
    Codice PHP:
    global $DB
    Altrimenti è meglio che specifichi meglio la struttura del sito

  3. #3
    Ho provato con il global ma restituisce lo stesso errore

    Index.php
    Codice PHP:
    <?php
    # prendo l'header
    include ('header.php');
    # prendo la pagina
    include ('miapagina.php');
    # prendo il footer
    include('footer.php');
    ?>
    header.php
    Codice PHP:
    <?php

    /****************************************************************************
    # RICHIAMO CLASSI
    *****************************************************************************/

    # recupero il file per la gestione del database
    require('./Class/database.php');
    # recupero il file per la gestione delle visite
    require('./Class/visite.php');

    /****************************************************************************
    # CONNESSIONE AL DATABASE ED ESTRAZIONE SITO ON-OFF
    *****************************************************************************/

    # apro la classe per il database
    $DB = new DB();
    # rendo globale in database
    global $DB;
    # mi connetto al database
    $DB->connect();

    /*

    QUI ALTRE OPERAZIONI....

    */
    ?>
    miapagina.php
    Codice PHP:
    /*

    CLASSE PER IL CONTEGGIO E L'INSERIMENTO DEI VISITATORI

    */

    class visiteAndUser
    {
     
    # indirizzo ip
     
    var $ip;
     
    # provenienza
     
    var $provenienza;
     
    # sistema operativo
     
    var $sistema;
     
         function 
    visiteAndUser(){
              
    // questo db è quello dell'header.php!!! ma non funziona
            
    $DB->query("SELECT id FROM visite WHERE ip_address = '$this->ip'");
            [...]
            }

    Praticamente devo prendere da dentro una classe l'oggetto di un'altra classe ed usarlo...

    Cosa devo fare?
    Realizzazione script php/mysql, per info:
    delrossofabio@gmail.com

    http://forum.html.it/forum/showthread.php?s=&threadid=1478962

  4. #4
    Il global $DB dovevi metterlo prima dell'utilizzo della classe in miapagina.php

    ...comunque...

    Così è come lo trasformerei io, poi ci sono altri modi

    index.php
    Codice PHP:
    <?php
    /****************************************************************************
    # RICHIAMO CLASSI
    *****************************************************************************/

    # recupero il file per la gestione del database
    require('./Class/database.php');
    # recupero il file per la gestione delle visite
    require('./Class/visite.php');

    /****************************************************************************
    # CONNESSIONE AL DATABASE ED ESTRAZIONE SITO ON-OFF
    *****************************************************************************/

    # apro la classe per il database
    $DB = new DB();
    # mi connetto al database
    $DB->connect();  

    # prendo l'header
    include ('header.php');
    # prendo la pagina
    include ('miapagina.php');
    # prendo il footer
    include('footer.php');
    ?>
    header.php
    Codice PHP:
    <?php
    /*

    QUI ALTRE OPERAZIONI....

    */ 
    ?>
    miapagina.php
    Codice PHP:
    <?php
    /*

    CLASSE PER IL CONTEGGIO E L'INSERIMENTO DEI VISITATORI

    */

    class visiteAndUser
    {
    # indirizzo ip
    var $ip;
    # provenienza
    var $provenienza;
    # sistema operativo
    var $sistema;

        function 
    visiteAndUser(){
             global 
    $DB;

             
    // questo db è quello dell'header.php!!! ma non funziona
            
    $DB->query("SELECT id FROM visite WHERE ip_address = '$this->ip'");
            [...]
            }
    }
    ?>

  5. #5

    .....

    Ciao.
    L'oggetto $DB lo puoi anche passare
    al costruttore della classe visiteAndUser
    e assegnarlo per riferimento se sei su PHP4
    a una proprietà della stessa classe una cosa
    del genere:
    Codice PHP:
    class Authentication extends getTables
    {
        var 
    $__DB;
        
        function 
    Authentication(&$db)
        {
            (
    is_object($db))?$this->__DB = &$db:exit('Could not connect');
            } 
    Per riferirti ai metodi della classe nel mio
    esempio un astrazione Db puoi fare

    Codice PHP:
    $this->__DB->performQuery($query); 
    Si chiama aggregation.


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6
    Ok la modificherò

    Grazie 1000!

    Ancora una cosa e poi ho finito...Ho notato che il global $DB va messo appena inizia la funzione prima che venga richiamato il database...

    L'unico problema e che siccome le funzioni sono tante, lo devo ripetere ogni volta il global?

    Grazie!
    Realizzazione script php/mysql, per info:
    delrossofabio@gmail.com

    http://forum.html.it/forum/showthread.php?s=&threadid=1478962

  7. #7

    Re: .....

    Originariamente inviato da whisher
    Ciao.
    L'oggetto $DB lo puoi anche passare
    al costruttore della classe visiteAndUser
    e assegnarlo per riferimento se sei su PHP4
    a una proprietà della stessa classe una cosa
    del genere:
    Codice PHP:
    class Authentication extends getTables
    {
        var 
    $__DB;
        
        function 
    Authentication(&$db)
        {
            (
    is_object($db))?$this->__DB = &$db:exit('Could not connect');
            } 
    Per riferirti ai metodi della classe nel mio
    esempio un astrazione Db puoi fare

    Codice PHP:
    $this->__DB->performQuery($query); 
    Si chiama aggregation.


    Ciao, grazie per il consiglio ma sono alle prime armi e non ho capito molto bene...C'è una guida in proposito? Su php.net la trovo?

    Grazie 1000!
    Realizzazione script php/mysql, per info:
    delrossofabio@gmail.com

    http://forum.html.it/forum/showthread.php?s=&threadid=1478962

  8. #8

    ........

    QUI





    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

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 © 2024 vBulletin Solutions, Inc. All rights reserved.