• User Newbie

    ma in teoria dentro $_SESSION["carrello"] non ho un elemento di tipo carrello?? io volevo recuperare i dati di QUEL carrello, aggiungerci i prodotti, e aggiornarlo nuovamente alla fine con $_SESSION["carrello"]=$cart ..

    ci deve essere qualcosa che non ho capito bene..


  • ModSenior

    [php]
    $cest = new cart();
    $cest= $_SESSION["carrello"];
    $cest->printcart();
    [/php]
    Allora la prima riga puoi tranquillamente toglierla, non ha senso creare un istanza per poi sostituirla subito.
    Dall'errore sembra manchi la definizione della classe, cioè tu fai:
    [php]
    $cest= $_SESSION["carrello"];
    [/php]

    Ma prima di fare questo devi avere:
    [php]
    class cart
    {
    .....
    }
    [/php]
    Se manca ottieni quell'errore.


  • User Newbie

    Ah ok, non devo creare un istanza della classe per poterci passare il valore (il mio era un approccio molto Java)!!

    La classe del carrello non dovrebbe essere nell' include_once("cart.php");

    Ora modifico qualcosa e tengo aggiornato il post!

    Grazie per l'interessamento


  • ModSenior

    Se la definizione della classe è in include_once("cart.php"); prova a spostare l'include in modo venga incluso prima di session_start.

    EDIT: Altrimenti puoi serializzare l'oggetto prima di salvarlo nella sessione.


  • User Newbie

    Penso di aver individuato la fonte di problema! Se seguo l'iter normale di vendita quindi:
    Pagina con dettagli --> Form per la quantita --> Cesta riassuntiva
    mi da la tabella che mi deve stampare. Ho messo un messaggio di stampa del carrello (print_r($_SESSION["carrello"]) prima della stampa dei prodotti se il carrello risultava con alcuni oggetti. Il risultato è:

    cart Object ( [id] => Array ( [0] => PR00 ) => Array ( [0] => 3 ) => Array ( [0] => 0 ) [precio] => Array ( [0] => 1200 ) )

    Se subito dopo riclicco sul bottone che mi dovrebbe riportare alla stessa pagina html (la solita cesta) ottengo come risultato:

    __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => cart [id] => Array ( [0] => PR00 ) => Array ( [0] => ) => Array ( [0] => 0 ) [precio] => Array ( [0] => 1200 ) )

    e un bel messaggio d'errore

    Fatal error: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "cart" 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 in C:\Portale\wamp\www\segurafinal\stampCarr.php on line 8

    il problema è quindi che lui si ricorda le caratteristiche del'oggetto, ma non ricorda che è un elemento della classe cart.php!!

    Può essere questa la fonte di tutto il problema?? consigli per risolverlo??


  • ModSenior

    Hai spostato l'include come ti ho indicato sopra?


  • User Newbie

    sisi.. la chiamata aggiungiProdotto è così:
    [php]
    <?php
    include_once("cart.php");
    include_once("startSess.php");
    //necessario sennò non riconosce il metodo add
    $cart= new cart();
    //questo non me lo stampa mai!
    if (isset($_SESSIO["carrello"])) echo "carrello riconosciuto";
    $cantidad= $_POST['cantidad'];
    $cart->add("PR00",$cantidad,0,1200);
    $_SESSION["carrello"]= $cart;
    include('cesta.html');

    ?>
    [/php]e la stampaCarrello.pho inclusa in cesta.html è
    [php]
    <?php
    include_once("cart.php");
    include_once("startSess.php");
    $cest= new cart();
    if(isset($_SESSION["carrello"])){
    print_r($_SESSION["carrello"]);
    print_r($_SESSION["carrello"]);
    $cest= $_SESSION["carrello"];
    $cest->printcart();
    } else {
    $cest->printcart(); }
    ?>
    [/php]ed è questa che stampa l'errore che riferivo


  • ModSenior

    Hai provato a serializzare l'oggetto prima di metterlo in una variabile di sessione?


  • User Newbie

    se con serializzare intendi fare serialize() sul dato prima di inserirlo e su unserialize() sul $_SESSION si si ci ho provato ma non va..

    Esistono altri modi?


  • ModSenior

    Teoricamente in quel modo dovrebbe funzionare, io ho anche provato in locale e non ho problemi a fare quello che fai tu.
    È abbastanza strano...


  • User Newbie

    anche io sto lavorando in locale ed è così che deve funzionare il mio portale per l'esame!
    Io sto utilizzando WAMP server con Apache, MySQL e PHP, mi sembra che tutto mi funzioni a parte questo della gestione delle sessioni!!
    Non so cosa può essere, devo fare delle modifiche ai file dei programmi (httpd.conf, php.ini, my.ini) ???

    Io la seriazizzazione l'avevo fatta così:

    caricaprodotto.php
    [php]
    <?php
    include_once("cart.php");
    session_start();
    $cart= new cart();
    //questo non me lo stampa mai!
    if (isset($_SESSION["carrello"])) {
    $cart= unserialize($_SESSION["carrello"]);
    $cart->add("PR00",$cantidad,0,1200);
    $resul= serialize($cart);
    $_SESSION["carrello"]= $resul;
    }else{
    $cantidad= $_POST['cantidad'];
    $cart->add("PR00",$cantidad,0,1200);
    $resul= serialize($cart);
    $_SESSION["carrello"]= $resul; }
    include('cesta.html');

    ?>
    [/php]

    stampacarello.php
    [php]
    <?php
    include_once("cart.php");
    include_once("startSess.php");
    $cest= new cart();
    if(isset($_SESSION["carrello"])){
    print_r($_SESSION["carrello"]);
    $cest= unserialize($_SESSION["carrello"]);
    $cest->printcart();
    } else {
    $cest->printcart(); }
    ?>
    [/php]

    ma ottengo come risultato*
    ( ! ) Warning: unserialize() expects parameter 1 to be string, object given in C:\Portale\wamp\www\segurafinal\aggCamDom.php on line 7

    ! ) Fatal error: Call to a member function add() on a non-object in C:\Portale\wamp\www\segurafinal\aggCamDom.php on line 8

    e non continua..* Ho sbagliato qualcosa io??