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

    Sessioni: se esiste già?

    Ciao a tutti.

    Ho sempre avuto problemi con le sessioni..e penso proprio che continuerò ad averne

    Sto lavorando su una pagina di SMF.
    Devo integrare tramite un plugin che sto scrivendo wfCart: per i più è una classe che gestisce un shopping cart tramite sessioni.

    Ora, quando lo lego al forum non riesco a far funzionare correttamente la sessione.
    Probabilmente si tratta di un errore di chiamata della stessa.

    Codice PHP:
    //controllo se la sessione cart essite
    if (!isset($_SESSION['cart'])) {
    //se non esiste la creo
    $cart =$_SESSION['cart'];
    //associo alla sessione l'oggetto Cart() (che è una classe)
    $cart = new Cart();
    }

    //controllo cosa c'è nella variabile sessione
    print_r($_SESSION); 
    questo è il risultato di print_r
    Codice PHP:
    Array (
     [
    session_value] => 0f565ed469f2d82f9d246227fcce4164
     
    .........  
    [
    cart] => __PHP_Incomplete_Class Object 
     

      [
    __PHP_Incomplete_Class_Name] => Cart 
      
    [nuovo] => 
      
    [vecchio] => 
      


    questo è invece il contenuto della classe Cart
    Codice PHP:
    class Cart {
     var 
    $nuovo 0;
     var 
    $vecchio 0;
     function 
    cart(){} //costruttore di classe;

     
    function add($v){
       
    $this->vecchio=$this->nuovo;
       
    $this->nuovo=$v;
     }
     function 
    get(){
      
    $obj['vecchio']=$this->vecchio;
      
    $obj['nuovo']=$this->nuovo;
      return 
    $obj;
     }

    come vedete mi da un nome alla variabile cart che non è ben definito.

    E non riesce a memorizzare i dati.
    In pratica quando passo alla funzione add() un nuovo valore, memorizza solo quello nuovo e non mantiene in memoria quello vecchio.

    Se questo script lo eseguo su un file esterno al forum, facendo partire la sessione tramite start_session() funziona senza problemi.

    Qualche suggerimento??

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    if (!isset($_SESSION['cart'])) {
    //se non esiste la creo
    $cart =$_SESSION['cart'];

    ....se NON è settata la variabile di sessione "cart" tu entri nella condizione...ma non esistendo la sessione, cosa assegni a $cart? :master:

  3. #3
    la sessione esite.
    è creata precedentemente dal forum..

    io controllo che non esista la variabile cart nella sessione.

    Quindi la creo.

    ... o sto sbagliando?

    Intanto grazie per la risposta...

  4. #4
    ok, penso di aver capito.
    ma non riesco comunque a trovare una soluzione.

    ora ho provato a modificare lo script cosi:

    Codice PHP:
    $cart =new Cart();
    $_SESSION['cart']=$cart
    Cosi lui crea in $cart la classe e poi la assegna alla sessione.

    In questo modo il print_r restituisce

    Codice PHP:
    Array ( 
    [
    session_value] => 0f565ed469f2d82f9d246227fcce4164 
    [cart] => Cart Object 
      [
    nuovo] => 
      
    [vecchio] => 
      
    )

    Per se passo un nuovo valore alla funzione add della classe cart, non manteniene in memoria il vecchio valore..

  5. #5
    niente. anche modificando seguendo delle impostazioni trovate online, e anche usando le impostazioni originali di wfCart non ripete l'errore iniziale, quindi mi crea la sessione in modo corretto e con le giuste variabili, ma non le gestisce.

    Come mai?

  6. #6
    andando a controllare con print_r($_SESSION['cart']), dopo l'esecuzione della funzione add. noto che nell'oggetto di sessione [cart] => Cart Object ( [nuovo] => 0 [vecchio] => 0 )
    il valore di nuovo cambia, questo significa che la classe scrive nella sessione.
    Quando però rigenero la pagina, i valori in sessione vengono azzerati. Come faccio a farli mantenere?

  7. #7

    Re: Sessioni: se esiste già?

    Originariamente inviato da Kreatore
    [php]
    //controllo se la sessione cart essite
    if (!isset($_SESSION['cart'])) {
    //se non esiste la creo
    $cart =$_SESSION['cart'];
    //associo alla sessione l'oggetto Cart() (che è una classe)
    $cart = new Cart();
    }
    Non ho controllato bene il codice, ma a lume di naso mi sa che sbagli ad impostare lo script.
    Guarda bene il codice che ho quotato: se la sessione non esiste crea una variabile $cart a cui associo il valore di sessione CART.
    Subito dopo sovrascrivo il valore di sessione con una chiamata ad una classe.
    Quindi dopo questo IF, la variabile $cart non ha il valore di sessione, ma contiene un riferimento ad una classe.
    Peraltro, se la sessione NON esiste, è inutile andare a dire ad una variabile di prendere il valore che recupera da una sessione che non esiste!

    Correggimi se sbaglio.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Grazie. Vero
    infatti freeman me lo aveva fatto capire nel secondo post.
    Come hai visto ho ragionate e leggendo alcune guide su le sessioni ho generato il codice seguente:
    Codice PHP:
    $cart =new Cart();
    $_SESSION['cart']=$cart
    ma anche questo non funziona.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    in realtà non è che quello non funziona, perchè il codice è corretto e se Cart() ritornasse qualcosa allora la sessione verrebbe inizializzata; il problema è che nella tua classe perdi i valori
    perchè non so, (e ribadisco, non so) se i valori della classe una volta modificati hanno valore sempre o solo quando viene chiamata la classe.
    Cioè,

    $vecchio = 0
    $nuovo = 0 ad inizio classe

    $this->vecchio=$this->nuovo;
    $this->nuovo=$v;

    quando chiami la classe la seconda volta, come fa a ricordarsi che $vecchio non è più 0 ma è cambiato?
    ma ripeto, magari sbaglio e una volta che cambi una variabile nella classe mantiene quel valore...

  10. #10
    è la domanda che mi sono fatto anche io.

    Ma se si va ad analizzare il codice di wfCart, ha la stessa struttura della classe (dichiara i valori delle variabili all'inizio).

    Però funziona.

    Come posso fare per fargli ricordare i valori?

    So che vengono usate le sessioni proprio per questo.

    Quando associo la classe Cart() alla sessione, viene generato un oggetto che rimane tale.

    In teoria qui dovrebbero venire salvati i dati.

    Sembra quasi, come hai detto tu Freeman, che ogni volta che chiamo la classe i valori vengono azzerati.
    Ma anche solo dichiarando le variabili, senza nessun valore, questi, alla seconda chiamata, perdono i valori precedentemente passati.

    Non capisco se è il forum SMF, che ogni volta azzera i dati di sessione, o se è la classe ad azzerarli.

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.