IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Mes objets perdent la mémoire !


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Mes objets perdent la mémoire !
    Bonjour,

    Je fais une petite appli qui utilise un panier. J'ai créer une classe panier qui contient entre autres un tableau et des méthode pour ajouter des éléments au tableau et en retirer.
    Lorsque l'utilisateur se loggue le panier est creé et est mis en session :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $gestP = new GestPanier( $_POST['email']);
    $_SESSION['PANIER'] = serialize($gestP);
    Voila le constructeur de ma classe GestPanier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Constructeur.
    function __construct($user) {
    $this->bdd = BDD::getInstance();
    $this->utilisateur = $user;
    // Initialisation des tableaux
    $this->vectTitre = array();
    $this->vectAlbum = array();
    }
    Le probleme viens que lorsque l'utilisateur ajoute un élément dans le panier, se dernier se reinitialise systèmatiquement. J'ai l'impression que lorsque je recupère mon objet de cette sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $gestP = unserialize($_SESSION['PANIER']);
    echo "<br>Nb element :  ".$gestP->getNbAlbum();
    $gestP->ajouterAlbum($_GET['addpanier']);
    echo "<br>Nb element : ".$gestP->getNbAlbum();
    les informations contenus dans mon panier se perdent.... Par exemple dans le script ci-dessus, il affiche le nb d'element dans mon panier : premier affichage : 0, apres ajout affichage = 1. Si je fais 10 ajout il affiche toujours 0 puis 1...

    Cependant, il semble perdre uniquement les infos contenus dans les tableau et pas par exemple les infos sur l'utilisateur qui sont stockés uniquement dans une variable de classe...(cf le constructeur)

    Voila comment je fais un ajout d'element dans mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->vectAlbum[] = $id_album;
    Mes pages commences toutes par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php session_start(); ?>
    suivi de l'autoload des classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function __autoload($class_name) { 
       require_once 'src/' . $class_name . '.php';
    }
    Si vous voyez une solution, ca me serait vraiment utile

    Merci d'avance,
    Loïc[/code]

  2. #2
    Membre émérite Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Par défaut
    serialize() retourne une chaîne représentant une valeur qui peut être stockée dans les sessions de PHP, ou une base de données. unserialize() peut relire cette chaîne pour recréer la valeur originale. serialize() va sauver toutes les variables d'un objet. Le nom de la classe sera sauvé mais par les méthodes de cet objet.

    Pour permettre à unserialize() de lire un objet, la classe de cet objet doit être définie. C'est-à-dire, si vous avez un objet $a de la classe A dans une page php1.php, et que vous le linéarisez avec serialize(), vous obtiendrez une chaîne qui fait référence à la classe A, et contient toutes les valeurs de $a. Pour pouvoir le relire avec la fonction unserialize() dans une page page2.php, il faut que la définition de la classe A soit présente dans cette deuxième page. Cela peut se faire de manière pratique en sauvant la définition de la classe A dans un fichier séparé, et en l'incluant dans les deux pages page1.php et page2.php.
    Article de la documentation offcielle dispo ici

  3. #3
    Invité
    Invité(e)
    Par défaut
    ok, mais je fais un autoload en debut de chaque page donc à prioiri ma définition de classe est effective pour la page...

    Ce que je comprends pas c'est que j'arrive a acceder sans problèmes aux valeurs contenu dans les variables "classiques" de ma classe mais pas à celles contenus dans les tableaux...étrange...

    Peut etre une erreur lors des enregistrements de valeurs dans mon tableau...je vais revoir ca

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon c'est bon j'ai trouvé : je dois récupérer mon objet dans la session, je le modifie et ensuite il faut le remettre dans la session....et là ca marche.

    Je pensais que ca le modifié aussi dans la session automatiquement...visiblement non.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Axis]gregorianCalendar dans mes objets
    Par seb_fou dans le forum Services Web
    Réponses: 1
    Dernier message: 19/05/2006, 01h24
  2. Pb de visibilité de mes objets
    Par flow++ dans le forum C++
    Réponses: 11
    Dernier message: 24/04/2006, 17h07
  3. [Threads]liste de mes objets de types threads
    Par comme de bien entendu dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 22/03/2006, 15h46
  4. Réponses: 5
    Dernier message: 08/12/2005, 22h40
  5. Objets et taille mémoire
    Par programan dans le forum C++
    Réponses: 4
    Dernier message: 15/09/2005, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo