Réaffichage d'une valeur...

Eléphant du PHP | 226 Messages

29 févr. 2008, 15:56

Bonjour,

l'utilisateur est appelé à supprimer une valeur via un formulaire... Pour faire correctement les choses, lorsque celui-ci valide la suppression, il est envoyé sur un autre fichier lui demandant la confirmation ou l'annulation... S'il annule, il revient sur le fichier précédent... Mon souci est que la valeur a disparu entretemps...
J'essaye d'utiliser les SESSIONS pour palier à cela, mais je n'ai pas non plus beaucoup plus de succès...
Du moins, la session est opérationnelle du fichier de suppression à celui de demande de confirmation, puisque ladite valeur s'affiche bien dans ce dernier, mais l'inverse ne se vérifie pas...
Dans mon fichier suppression, j'ai:
// initialisation de la session
session_start() ;
$_SESSION['CodePostal'] = $_GET['CodePostal2'];
// affichage de la valeur dans le formulaire, que je voudrais bien voir apparaître lorsque j'annule
<input name="ModifCodePostal" type="text" id="ModifCodePostal" value="<?php echo $_SESSION['CodePostal']; ?>" size="5" />
// validation et redirection
<input name="supprimer" type="submit" id="supprimer" value="Supprimer" />
if(isset($_POST['supprimer'])){
header('location: confirm_suppression.php');
} 
Dans mon fichier de confirmation:
session_start() ;
if( $_POST['envoyer'] == 'Confirmer'){requête...
}
if( $_POST['envoyer'] == 'Annuler'){// on revient au fichier précédent
header('location: codePostalModif.php');
}
Je pense que quelque chose doit m'échapper... merci.
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

Mammouth du PHP | 1353 Messages

29 févr. 2008, 16:13

Cela me parait normal...

En effet tu fais un $_SESSION['CodePostal'] = $_GET['CodePostal2']; sans vérifier que :

1/ il y ai bien une valeur dans $_GET['CodePostal2'];
2/ $_SESSION['CodePostal'] ne soit pas deja defini.

donc quand tu reviens sur cette page si tu viens d'une autre page que celle qui transmet CodePostal2 il affecte une valeur vide à ta variable de session...

j'opterais pour une petite série de test avant l'affectation de la variable :
if(isset($_GET['CodePostal2'])) $_SESSION['CodePostal'] = $_GET['CodePostal2'];
Ensuite je ne sais pas comment tu gères le changement de code donc je n'en dirais pas plus mais par exemple ajouter la condition !isset($_SESSION['CodePostal']) ou !empty($_SESSION['CodePostal']) peut etre utile...
Modifié en dernier par guilt92 le 29 févr. 2008, 16:16, modifié 1 fois.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 4674 Messages

29 févr. 2008, 16:13

Bonjour,

je crois que tu fais une confusion.
Dans ta page de suppression, tu as les données de ton formulaire via $_POST. Tu transferts tes données dans $_SESSION, puis redirige vers confirm_suppression.php, où là, tu travailles sur $_POST, mais il n'existe plus !
Dans ton fichier de confirmation, travaille sur $_SESSION et non $_POST. Ça ira mieux :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

d0m
Mammouth du PHP | 1141 Messages

29 févr. 2008, 16:17

La session est opérationnelle pendant le va et vient.
Ce qui cloche c'est le moment ou tu met une valeur dans $_SESSION['CodePostal'].

Dans la page suppression, tu as la ligne :
$_SESSION['CodePostal'] = $_GET['CodePostal2']; 
Lorsque tu arrives pour la première fois dans la page suppression, tout est ok car $_GET['CodePostal2'] est défini et vaut le code postal.

Par contre lorsque tu ne confirmes pas et que tu renvoie sur la page de suppression, $_GET['CodePostal2'] n'est pas défini car tu ne l'envoie pas de la page de confirmation à la page de suppression.
Et donc $_SESSION['codePostal'] prend une valeur vide.

Il faut donc avant de mettre $_GET['CodePostal2'] en session, tester si $_GET['CodePostal2'] est bien défini :
<?php
if(isset($_GET['CodePostal2']))
  $_SESSION['codePostal'] = $_GET['CodePostal2']

Eléphant du PHP | 226 Messages

03 mars 2008, 10:25

Bonjour,

Trois personnes qui me répondent sensiblement la même chose, sans pour autant que je saisisse exactement ce que vous voulez dire... Vous parlez bien de '$_GET['CodePostal2']' qui est envoyé en fait d'un fichier tier, qui se situe en amont, et que je n'ai pas encore mentionné. C'est en fait une chaîne de trois fichiers : listeZg.php > codePostalModif.php > confirm_suppression.php. Je peux très bien comprendre que $_GET['CodePostal2']' soit vide si je reviens uniquement à mon fichier de suppression (codePostalModif.php) l'envoie de CodePostal2 n'existant plus (listeZg.php)... est-cela que vous voulez dire ?

merci,
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

d0m
Mammouth du PHP | 1141 Messages

03 mars 2008, 10:37

Voilà c'est ça.
Voilà un petit schéma d'explication d'une suppression :

Code : Tout sélectionner

page "tiers" => page suppression => page confirmation =oui=> requête suppression =non=> page suppression
Tu arrive donc par 2 cas différents sur la page suppression.

En venant de la page tiers : $_GET['CodePostal2'] est défini donc la ligne
$_SESSION['CodePostal'] = $_GET['CodePostal2'];
se passe comme tu veux.

En venant de la page de confirmation : $_GET['CodePostal2'] n'est pas défini (d'ailleurs tu devrait avoir une erreur te le disant) donc la ligne
$_SESSION['CodePostal'] = $_GET['CodePostal2'];
ne se passe comme tu veux et $_SESSION['CodePostal'] se retrouve vide.
En l'affichant donc dans le formulaire :<input name="ModifCodePostal" type="text" id="ModifCodePostal" value="<?php echo $_SESSION['CodePostal']; ?> tu te retrouveras donc avec un champ texte vide au lieu du code postal.

L'idée est donc de n'exécuter la ligne
$_SESSION['CodePostal'] = $_GET['CodePostal2']
que dans le cas ou tu viens directement de ta page tiers. Dans l'autre cas, il ne faut pas toucher au code postal en session puisqu'il y est déjà.

Eléphant du PHP | 226 Messages

03 mars 2008, 13:30

Merci dOm pour ces précisions! Donc, si on se comprend bien, j'aurais dû déclarer ma session dès le premier fichier en somme... (car je ne l'ai fait qu'au niveau du fichier suppression)
merci,

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

d0m
Mammouth du PHP | 1141 Messages

03 mars 2008, 14:50

Non pas vraiment.

en venant de la page tiers, dans la page suppression tu as une valeur $_GET['codePostal2'] venant de l'url ou d'un formulaire...
Tu peux donc mettre cette variable en session dans la page suppression.
Par contre il faut tester avant si tu viens de la page tiers ou de confirmation.

Si tu viens de la page tiers => tu mets la variable en session
Si tu viens de la page de confirmation => tu ne la mets pas (en fait elle y est déjà lorsque tu étais la première fois sur la page suppression)

Pour tester les 2 cas, il suffit de tester l'existence de la variable $_GET['codePostal2'].
if(isset($_GET['codePostal2'])){
  //la variable existe donc on peut la mettre en session
  $_SESSION['code_postal'] = $_GET['codePostal2'];
}
else{
  // la variable n'existe pas donc on vient de la page de confirmation
  //donc la variable existe déjà en session
  //on ne fait donc rien
}

Eléphant du PHP | 226 Messages

03 mars 2008, 15:07

Loupé! Tu m'as coupé l'herbe sur les pieds, dOm. Je m'apprêtais à éditer mon précédent message pour dire confirmer tout cela... Je viens d'en faire l'expérience...
Merci beaucoup! C'est vraiment plus clair maintenant... :merci:
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.