Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Includere oggetto in sessioni

    Ciao a tutti come da titolo come posso includere un oggetto all'interno di una sessione?

    Ovvero:

    Codice PHP:
            if($_POST) {
            include_once 
    'persona.class.php';

            
    $n $_POST['nome'];
            
    $c $_POST['cogn'];
            
    $s $_POST['sesso'];
            
    $e $_POST['eta'];

            
    $p = new Persona($n,$c,$s,$e);

            
    $p->toString();

            
    $_SESSION['persona'] = $p;


            echo 
    "

    [url='2.php']continua[/url]"
    ;
        } 
    in 2.php cosi come'è mi da errore:

    Codice PHP:
            include_once 'persona.class.php';
            
    $p $_SESSION['persona'];

            
    $p->toString(); 
    Cosa sbaglio??

    Grazie

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    quando hai problemi specifica sempre l'errore che restituisce il php.

    Comunque credo che sia dovuto al fatto che lanci il session_start prima di aver incluso il file contenente la classe.

    ciao

  3. #3
    Quando clicco su continua la pagina 2.php stampa ciò:

    Codice PHP:
    Fatal errormain() [[url='function.main']function.main[/url]]: The script tried to execute a method or access a property of an incomplete objectPlease ensure that the class definition "Persona&quotof the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\wamp\www\PHP-Class\2.php on line 17 

    la line 17 è quella di

    Codice PHP:
    $p->toString() 
    il session_start() l'ho messo come prima istruzione della pagina! Ho provato a metterla dopo aver incluso il file della classe, e che fa... esegue correttamente il $p->toString() stampando i dati provenienti dall'oggetto creato nell'altra pagina e a seguire:

    Codice PHP:
    Warningsession_start() [function.session-start]: Cannot send session cache limiter headers already sent (output started at C:\wamp\www\PHP-Class\2.php:9in C:\wamp\www\PHP-Class\2.php on line X 
    dove X è la riga dove ho scritto

    Codice PHP:
                     include_once 'persona.class.php';
    X        session_start(); 
    Che devo fare?

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Le opzioni possibili sono 2:

    1. Nella classe dai un output "volontariamente" tipo un echo o un print.
    2. Nella classe dopo la chiusura (o prima dell'apertura) del tag di php hai un qualche ritorno a capo.

    In ogni caso il metodo è giusto, devi solo capire dove viene generato l'output.

    ciao

  5. #5
    premetto che le classi in PHP le ho iniziate ieri notte, sto nel caso 1, c'è un echo nella mia classe:

    Codice PHP:

    <?php

    class Persona {

        var 
    $nome;
        var 
    $cognome;
        var 
    $sesso;
        var 
    $eta;

        
    //Costruttore
        
    function Persona($n,$c,$s,$e)    {
            
    $this->nome $n;
            
    $this->cognome $c;
            
    $this->sesso $s;
            
    $this->eta $e;
        }
        
        function 
    toString() {
            echo 
    $this->nome.' '.$this->cognome.'
    '
    .$this->sesso.', '.$this->eta.' anni';
        }
    }

    ?>

    Ma perchè non si può mettere?

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    L'echo che c'è dentro il metodo toString non conta, perchè il metodo lo richiami dopo l'inizio della sessione, io controllerei che il file cominci della classe cominci proprio con <?php e non ci siano dei ritorni a capo prima, cosi come non ce ne devono essere dopo ?>.

    Non può essere lanciato un output nella pagina prima dell'inizio della sessione, perchè il comando session_start va a modificare l'header della pagina (la parte che tu nn vedi nel browser), ma che contiene tutta una serie di informazioni del protocollo http.

    Quando tu fai un echo l'header viene composto e chiuso in automatico, quindi il session_start non può più modificare l'header della pagina e ti da un warning.


  7. #7
    scusa ma tu dici che non può essere lanciato un output nella pagina prima di sessio_start();
    ma prima hai detto questo:

    Comunque credo che sia dovuto al fatto che lanci il session_start prima
    di aver incluso il file contenente la classe
    Quindi ho capito che il session_start() va messo DOPO l'inclusione del file della classe.

    Ora il mio file 2.php è cosi:

    Codice PHP:
    <?php  session_start(); ?>
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
        <?php
            
    include_once 'persona.class.php';

            
    $p $_SESSION['persona'];

            <?
    php  session_start(); ?>
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
        <?php
            
    include_once 'persona.class.php';

            
    $p $_SESSION['persona'];

            
    $nome $p->getNome();

            echo 
    $nome;
        
    ?>
    </body>
    </html>
        ?>
    </body>
    </html>
    e lancia il primo errore che ho riportato nel mio secondo post!

  8. #8
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    è un bel casino il tuo file, lanci il session start 2 volte, includi due volte la classe (ok che usi include_once, però non vuol dire che devi abusarne).

    devi cambiare il tuo file cosi:

    Codice PHP:
    <?php  
    include_once 'persona.class.php';
    session_start(); 
    ?>
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
       <?php
            $p 
    $_SESSION['persona'];

            
    $nome $p->getNome();

            echo 
    $nome;
        
    ?>
    </body>
    </html>

  9. #9
    Incredibile!! Dovrò segnalare un bug nel forum, mica ho scritto quelle cose io, certo che è un casino! E' come se si fossero riepetuti tag e istruzioni php a piacimento!

    Praticamente ciò che avevo postato nei tag [PHP] era lo stesso codice che hai messo tu tranne il require prima del session_start(); Cmq bug o non bug FUNZIONA!!! Sei un grande mi sei stato di grande aiuto!

    Solo una cosa, ma tra require_once e include che differenza c'è? :master:

  10. #10
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    require se nn trova il file da un errore e blocca l'interpretazione del file php, l'include invece da un warning ma va avanti lo stesso.

    ciao

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.