Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/03/2006, 14h00   #1
Membre habitué
 
Avatar de nesbla
 
Inscription : mai 2002
Messages : 220
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 220
Points : 113
Points : 113
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 :
1
2
$gestP = new GestPanier( $_POST['email']);
$_SESSION['PANIER'] = serialize($gestP);
Voila le constructeur de ma classe GestPanier :
Code :
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 :
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 :
$this->vectAlbum[] = $id_album;
Mes pages commences toutes par
Code :
<?php session_start(); ?>
suivi de l'autoload des classes :

Code :
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]
__________________
··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !
nesbla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2006, 14h12   #2
Membre émérite
 
Avatar de Yobs
 
Inscription : avril 2004
Messages : 675
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2004
Messages : 675
Points : 808
Points : 808
Envoyer un message via MSN à Yobs
Citation:
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
__________________
Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés
Yobs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2006, 17h27   #3
Membre habitué
 
Avatar de nesbla
 
Inscription : mai 2002
Messages : 220
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 220
Points : 113
Points : 113
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
__________________
··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !
nesbla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2006, 18h57   #4
Membre habitué
 
Avatar de nesbla
 
Inscription : mai 2002
Messages : 220
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 220
Points : 113
Points : 113
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
__________________
··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !
nesbla est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h48.


 
 
 
 
Partenaires

Hébergement Web