Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27

Discussione: Problemi con oggetti

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208

    Problemi con oggetti

    Ciao a tutti, ho una pagina html in cui in base al pulsante premuto faccio uno switch e poi richiamo diverse funzioni, ognuna di questi funzioni è però legata ad un oggetto ben preciso che viene istanziato al primo caricamento della pagina
    Codice PHP:
    include("ClassTelnet.php");

    $ConnectAddress "in.alice.it";
    $TimeOut 10;
    $port 110;
    $telnet_instance = new TELNET($ConnectAddress,$port,$TimeOut);

    function 
    connetti(){

    $ConnectAddress "in.alice.it";
    $TimeOut 10;
    $port 110;
    $telnet_instance = new TELNET($ConnectAddress,$port,$TimeOut);
    $telnet_instance->connect();

    }

    function 
    mostra(){
        
        
    $telnet_instance->get_response();
        
        
    }

    switch (
    $_POST['submit']){
    case 
    "Connetti":
            
    connetti();
            break;
            
    case 
    "Mostra":
            
    mostra();
            break;
            
    case 
    "Disconnetti":
            break;


    Se clicco sul connetti, non ci sono problemi, invece quando poi clicco su Mostra mi compare questo errore

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

    Cosa potrei fare?

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053

    Re: Problemi con oggetti

    Originariamente inviato da wave00
    Cosa potrei fare?
    Semplicemente passare alla funzione mostra() la variabile che fa riferimento alla classe Telnet
    Ti dà quell'errore perché $telnet_instance non ha un ambito globale e quindi all'interno di mostra() essa non è visibile.


    Codice PHP:
    include("ClassTelnet.php");

    /* Il codice seguente non dovrebbe servire più, a meno che lo script non prosegue ulteriormente

    $ConnectAddress = "in.alice.it";
    $TimeOut = 10;
    $port = 110;
    $telnet_instance = new TELNET($ConnectAddress,$port,$TimeOut);
    */


    function connetti(){

    $ConnectAddress "in.alice.it";
    $TimeOut 10;
    $port 110;
    $telnet_instance = new TELNET($ConnectAddress,$port,$TimeOut);
    $telnet_instance->connect();

    return 
    $telnet_instance// Restituiamo l'istanza della classe Telnet
    }

    // Indispensabile fornirgli il riferimento alla classe istanziata al di fuori della funzione
    function mostra($telnet_instance){
        
        
    $telnet_instance->get_response();
        
        
    }

    switch (
    $_POST['submit']){
    case 
    "Connetti":
            
    $telnet_instance connetti(); // Eseguiamo la connessione e salviamo il riferimento all'istanza della classe Telnet dentro una variabile
            
    break;
            
    case 
    "Mostra":
            
    mostra($telnet_instance);  // Chiamata di funzione che fornisce anche il riferimento alla classe Telnet
            
    break;
            
    case 
    "Disconnetti":
            break;


    Un ultimo suggerimento: per evitare confusione sull'ambito delle variabili potresti definire connetti() e mostra() prima del resto dello script, così ti risulta più evidente la necessità di fornirgli $telnet_instance come primo argomento di funzione

    Ciao
    Daniele
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208
    grazie mille per la risposta, ora provo.Ma come mai non risulta come globale la variabile $telnet_instance, come dovrei fare per renderla tale?
    Ma tu hai un contatto msn. Ho bisogno di finire sto progetto al + presto e non conosco php benissimo.

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208
    grazie mille, importantissimo da leggere

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208
    Ottengo sembre lo stesso errore e non capisco come mai, vi faccio vedere l'intero codice:
    Codice PHP:
    <?php
    session_start
    ();
    if (
    $_POST['submit'] == "")
    {
        
    }
    else{

    include(
    "ClassTelnet.php");
    $telnet_instance;

    function 
    connetti(){

    $ConnectAddress "in.alice.it";
    $TimeOut 10;
    $port 110;
    $telnet_instance = new TELNET($ConnectAddress,$port,$TimeOut);
    $telnet_instance->connect();
    return 
    $telnet_instance;

    }


    function 
    invia($telnet_instance){
        
    $telnet_instance->send_command();
        echo 
    $telnet_instance->get_response();    
    }

    switch (
    $_POST['submit']){
    case 
    "Connetti":        
            
    $telnet_instance connetti();
            break;
            
    case 
    "Invio":        
            
    invia($telnet_instance);
            break;
            
    case 
    "Disconnetti":
            break;

    }


    }
    ?> 

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
            <title>Console</title>
        <style type="text/css">
        #container{
            
            margin-left:auto;
            margin-right:auto;
            width:800px;
            
        }
        #Shell{
            margin-left:auto;
            margin-right:auto;
            padding:0px;
            width:400px;
        }
        #TextResult{
            width:400px;
            height:300px;
        }
        
        #TextCommand{
            width:300px;
        }
    </style>
        </head>
        <body>
            <div id="container">
                <form id="f1" method="post" action=telnet.php>
                    <table id="Shell">
                        <tr>
                            <td colspan="2">
        
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <input id="TextCommand" type="text"></input>                    
                            </td>
                            
                            <td>
                                <input id="mostra" type="image" value="Invio" name="submit">
                                
                            </td>
                            <td>
                                <input id="connessione" type="image" value="Connetti" name="submit">
                                
                            </td>
                        </tr>
                    </table>
                </form>
            </div>
                
            
        </body>
    </html>
    L'errore è "Call to a member function send_command() on a non-object "

  7. #7
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Occhio: ogni volta che php finisce di elaborare una pagina, tutte le variabili vengono distrutte. Devi sfruttare le variabili di sessione per memorizzarle tra una richiesta e l'altra.

    Al posto di:
    return $telnet_instance

    usa:
    $_SESSION['telnet_instance'] = $telnet_instance;

    Tutte le volte che vorrai agire su $telnet_instance dovrai usare $_SESSION['telnet_instance']

    Ciao
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208
    Ho provato a fare una modifica di questo tipo
    Codice PHP:
    <?php
    session_start
    ();
    if (
    $_POST['submit'] == "")
    {
        
    }
    else{

    include(
    "ClassTelnet.php");


    function 
    connetti(){
        
    $ConnectAddress "in.alice.it";
        
    $TimeOut 10;
        
    $port 110;
        
    $_SESSION['telnet_instance'] = new TELNET($ConnectAddress,$port,$TimeOut);
        
    $telnet_instance $_SESSION['telnet_instance'];
        echo 
    $telnet_instance->connect();

    }


    function 
    invia(){
        
    $telnet_instance $_SESSION['telnet_instance'];
        
    $telnet_instance->send_command();
        echo 
    $telnet_instance->get_response();
    }
    Perchè come hai detto giustamente tu, ogni volta che viene fatto il postback della pagina perdo tutte le variabili, quindi ho salvato la mia istanza di TELNET in sessione, in modo che qualsiasi metodo possa utilizzarlo.
    Soltanto che adesso è spuntato quest'altro errore:

    " The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "TELNET" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition"

  9. #9
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Prova ad includere la classe direttamente nelle funzioni, prima di lavorare sugli oggetti.
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  10. #10
    Originariamente inviato da wave00
    Soltanto che adesso è spuntato quest'altro errore:

    " The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "TELNET" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition"
    Come da manuale, devi includere la classe PRIMA di avviare la sessione.

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.