|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : octobre 2009 Messages : 6 ![]() |
Bonjour à tous.
Je vais aller droit au but, voici un morceau de code qui déconne : Code :
Ensuite, je supprime le message d'erreur des sessions avec un simple unset. J'affiche à nouveau, et là il est censé m'avoir viré le truc error de la session. PHP ne l'entend pas de cette oreille Deux cas de figure : - si le unset est présent, le premier var_dump m'affiche directement qu'un seul objet (juste le user, le error a disparu), pareil pour le deuxieme - si je vire le unset, les deux var_dump fonctionnent normalement et m'affichent les deux objets Je suis en PHP objet, et ce probleme est juste incompréhensible Comment le unset peut faire en sorte d'agir avant le premier var_dump ?? J'espère que vous pourrez m'aider, merci d'avance pour vos réponses |
||
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 702 ![]() |
Salut
Faudrait voir au moins dans les grandes lignes comment cet élément "error" et l'Objet dont il est question est implémenté, car ça dépend. Mais de mon coté, et pour ce qui est de la gestion des messages de retours à l'utilisateur je fais comme ceci : Donc je ne détruit pas cet élément, je le vide uniquement. En faite, il faudrait voir s'il est vraiment utile, voir même souhaitable, de le détruire ou juste détruire ce qu'il contient. Disons que l'Objet Error (son instance) et l'élément (error) de la session sont théoriquement une même référence, le détruire peu causer problème. Enfin, faut voir.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : octobre 2009 Messages : 6 ![]() |
En fait le plus étonnant, c'est que ce n'est pas spécifique au unset mais si je fais un $_SESSION['error'] = "lol" entre les deux var_dump, les deux var_dump retourneront la même valeur
![]() Par contre, je me suis mal exprimé : $_SESSION['error'] ne contient pas un objet mais juste une chaine de caractères, alors que l'autre ($_SESSION['user']) contient bien l'instance de l'objet User. L'erreur peut-elle venir du fait que juste après l'affectation de mon $_SESSION['error'] je fais une redirection avec un header(Location:...) ? |
|
00
|
|
|
#4 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 702 ![]() |
Citation:
Disons qu'il est normal de voir (page suivante) la valeur affectée à la page précédente, donc après la redirection. Lorsque tu fais du débug comme ça, je te conseil de mettre un point d'arrêt, sinon, les header() ça peu être piégeant effectivement. De plus, quand il s'agit de données en session, il faut vérifier en 1er les données dès le démarrage de la session (session_star()), car on ne sait jamais s'il y a un code par là qui les modifieraient en cours de route. Après, on peu toujours "pister" une données tout au long de son script pour voir si ça évolue comme prévu. Bref ... du débug quoi Exemple : Code :
Ces 2 données en session "user" et "error" ont très certainement une gestion différente : - Pour le user, théoriquement le seul moment où il doit être détruit c'est si tu as une page de déconnexion (comme là haut sur ce forum). - Pour le error, il devrait être tout le temps ré-initialisé ou détruit à chaque page, tout ça pour éviter que le message persiste de page en page. C'est ça qu'il faut voir non ? Bref, comment as tu prévu de gérer ça.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : octobre 2009 Messages : 6 ![]() |
C'est exactement ca oui, d'ailleurs je viens de trouver un élément de réponse.
En fait, le problème survient lorsque j'effectue le unset dans ma classe Page (qui a pour but d'afficher le header du site, le menu, et le footer). Je mets ce traitement dans mon instance de page car je souhaite qu'à chaque chargement de la page, il vérifie s'il y a une erreur, auquel cas il va m'afficher un message d'erreur, puis supprimer l'erreur (comme tu l'as dit, pour qu'elle ne s'affiche plus sur les pages suivantes). Je vais essayer de débugger ca dans mon coin, et si je ne trouve pas le probleme, je posterai le code de ma classe page. Ce comportement est tout de même assez étonnant. PS : avec le point d'arret, même fonctionnement : sans unset, error est logiquement présent dans les 2, avec point d'arret, error n'existe plus les 2 |
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : octobre 2009 Messages : 6 ![]() |
Bon, après quasi 24h de recherches, j'ai enfin résolu ce problème
Le problème était, comme prévu, tout con : après mon header(Location ...) je n'avais pas mis de exit(); Eh oui, du coup le reste de la page a du etre parcouru avant de faire la redirection, ce qui implique le unset du error, c'est pourquoi une fois arrivé sur ma page de destination, le unset avait déjà été fait. Ahhhh... le programmation et ses vices
|
|
00
|
Copyright © 2000-2012 - www.developpez.com