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 26/03/2007, 16h30   #1
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Par défaut Détruire variable session (pas session entière)

Bonjour,

Mes sessions liées aux paniers de mon site e-commerce se présentent comme suit :
Citation:
$_SESSION[article'numero'] = quantité
J'utilise cette fonction pour détruire toutes les variables session dont le nom commence par "article" avec la fonction unset() mais les variables sont toujours là après l'opération!
Code :
1
2
3
4
5
6
7
8
<?php
foreach ($_SESSION as $cle=>$valeur) {
	if (substr_count($cle, "article") > 0) {
		echo 'Destruction variable $_SESSION[\'' . $cle . '\']<br>';
		unset($_SESSION['$cle']);
	}
}
?>
Le résultat affiché est par exemple :
Citation:
Destruction variable $_SESSION['article50']
Destruction variable $_SESSION['article292']
Destruction variable $_SESSION['article129']
Donc j'entre bien dans la boucle et les variables sont correctes. Aurais-je fait une erreur quelque part?

webrider
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 17h10   #2
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Je pense bien voir une erreur : c'est
Code :
unset($_SESSION[$cle]);
qu'il faut écrire et pas
Code :
unset($_SESSION['$cle']);
.
Inutile de mettre des quotes dans les indexes de tableaux si ce sont des variables.
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 17h58   #3
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Merci pour ta réponse guidav mais ça ne change rien, les articles sont toujours là au grand complet...
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 18h20   #4
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
J'ai trouvé qqch d'intéressant dans le manuel PHP :
Citation:
Si une variable globale est détruite avec unset() depuis une fonction, seule la variable locale sera détruite. Le variable globale gardera la valeur acquise avant l'appel à unset().
Si je fais un echo de la variable directement après le unset(), rien n'est affiché => elle est détruite... en local.

Il me faut monter d'un niveau et la détruire au niveau global mais je sèche! Quelqu'un pour m'aider?

Merci!!

EDIT : j'ai aussi essayé ça mais sans succès
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2007, 12h02   #5
Membre actif
 
Avatar de bigltnt
 
Inscription : mars 2007
Messages : 221
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 221
Points : 155
Points : 155
C'est une solution un peu crado mais si tu ne te sers pas de isset(), tu peux implémenter la valeur des variables que tu veux détruire à "NULL".

Ouais je sais c'est vraiment très moche, j'ai presque honte

Mais si tu trouves pas .....

++
bigltnt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2007, 14h00   #6
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Salut!

En dernier recours ce pourrait être une solution pour fixer la valeur de la variable à null mais cela n'arrangera pas mon problème.

Comme je l'ai précisé plus haut, je ne veux pas seulement détruire le contenu de la variable mais la variable elle-même. Cela fait une grande différence dans le cas qui m'intéresse.
Si je ne détruis que le contenu, l'article sera toujours là dans le panier avec une quantité null. Si je détruis la variable elle-même, l'article ne sera plus là du tout et mon problème sera réglé.

Je ne sais pas pourquoi j'ai tant de problèmes avec mes sessions, serait-ce dû à une mauvaise compilation de mon module php? Je ne parviens pas à faire de tableau dans mes sessions ni à détruire une variable donnée. PHP permet quand-même bien de le faire ou je me trompe ?!
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2007, 11h41   #7
Invité de passage
 
Inscription : mars 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 2
Points : 2
Points : 2
Bonjour,

Ma question est peut-être idiote, mais fais-tu bien un session_start() avant de faire référence à $_SESSION ? Si oui, ton session_start est-il bien placé au début de ton code ?

Sinon, ça serait pas mal si tu pouvais mettre des extraits de ton code (en particulier : fonction création de la session, fonction d'initialisation de tes variables de session, fonction (complète) de destruction de tes variables de session, etc.). Pour ma part, je n'ai jamais rencontré de problème avec unset sur les variables de session, donc je me dis que ton problème doit être ailleurs.

Alh
Alheran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2007, 11h59   #8
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Autre suggestion, mais nettement plus difficile à mettre en oeuvre : définir ton panier sous forme de classe, avec une fonction ajout et une fonction retrait.
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2007, 20h53   #9
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Merci pour vos réponses,

Alors je vous le dis tout de suite, je suis parvenu à régler mon problème.

Au départ je n'utilisais pas session_start() parce que j'avais imposé session.autostart=1 dans mon php.ini. Ce fut une grande erreur car passer de autostart=1 à 0 a tout arrangé (avec les session_start() bien entendu).

guidav, j'utilise ce procédé pour mon panier, difficile à mettre en oeuvre mais super pratique par la suite->une instanciation->une méthode->et hop le panier est mis à jour!

J'ai apprécié votre aide à tous et petit conseil : n'utilisez jamais session.autostart=1! LOL

Bonne soirée,

webrider
__________________
Pensez au tag
webrider 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 01h02.


 
 
 
 
Partenaires

Hébergement Web