Actualiser la page et $_SESSION

Résolu
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008 - 21 oct. 2005 à 09:10
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008 - 21 oct. 2005 à 16:07
Bonjour,



Tout d'abord une grand merci à arnal69130 pour sa source qui marche à
merveille, si ce n'est un petit souci : je m'explique : j'ai un
formulaire en POST, qui envoie les infos à une feuille intermédiaire
qui transforme les $_POST en $_SESSION (encore merci à arnal ;-)), qui
vérifie la saisie et qui bascule selon la validité de cette saisie soit
sur la suite, soit qui me ramène à mon formulaire où les $_SESSION vont
être utilisés pour valeur par défaut de mes champs. Du coup, je suis
obligé de vider les variables de SESSION à la fin de la page pour
éviter que mon utilisateur, lors d'une nouvelle saisie sur mon form se
retrouve avec ses valeurs par défaut. Jusque là ça fonctionne, sauf que
dans le système où je vais intégrer ces feuilles je passe en SESSION
d'autres variables donc notamment le login utilisateur. Quel est le
moyen le plus simple pour vider les $_SESSION qui m'intéressent sans
toucher aux autres, en évitant par exemple une boucle fastidieuse qui
testerait les clés des $_SESSION?

En espérant avoir été clair... merci pour vos futures participations...


lagombe

13 réponses

monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
21 oct. 2005 à 14:37
Mouahahah FhX t'as lu dans mes pensées :p (mais j'ai eu la flemme sur
le coup parce qu'il aurait fallut comme je vais le faire expliquer
comment construire le formulaire html pour avoir la même structure dans
la variable $_POST que ce que tu as décris)



donc lagombe faut faire un truc comme ça :

<form method="post" action="plop.php">

















</form>



et le code de ton mentor ;p te donnera ce qu'a écrit FhX =)
3
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008
21 oct. 2005 à 09:11
J'ai oublié de donner l'adresse de la source d'arnal69130 :

http://www.phpcs.com/code.aspx?id=24433

;-)

lagombe
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
21 oct. 2005 à 09:30
Je pense qu'il faut vider les variables que tu veux supprimer une par une avec

unset($_SESSION["a_la_poubelle"]);



Ou alors utiliser un nommage différent selon les variables que tu veux garder ou pas. par exemple :

$_SESSION["perm_variable"] = "plop";

$_SESSION["temp_variable"] = "plop";



Si tu ne veux supprimer que les variables temporaires tu n'as plus qu'a faire

foreach($_SESSION as $key=>$val)

{

if(substr($key,0,5) == "temp_")

unset($_SESSION[$key]);

}



Mais bon, à ta place, si je n'ai pas beaucoup de variable, j'utiliserais tout bêtement ma première solution.

(Je ne sais plus qui aime pas les foreach, mais s'il voit mon post il va me gronder :p)
0
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008
21 oct. 2005 à 09:39
Les vider une par une... ça risque d'être un peu long et confus... vu
le nombre de varaibles de SESSION que je vais me trimbaler avec le
script d'arnal69130... et je voulais éviter le foreach mais on est
d'accord, je crois que ce sera difficile... ;-)

lagombe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
21 oct. 2005 à 09:54
Hello,

y a pas, faut boucler sur les variables à effacer.
Néanmoins, si l'idée de monoceros est très bonne (je parle de la 2de), j'éviterais de boucler sur un substr() en plus. A la place, j'utiliserais un autre tableau, dans lequel je stockerais index à effacer. Puis je bouclerai sur ce tableau, pour effacer les index correspondants dans $_SESSION.
bref :
$AEffacer = array ('sup','supagain');
$_SESSION['sup'] = 'A effacer';
$_SESSION['supagain'] = 'A effacer aussi';
$_SESSION['keep'] = 'A garder;

foreach ($AEffacer as $supr) {
unset ($_SESSION[$supr]);
}

L'inconvénient est qu'au lieu d'une simple règle de nommage, tu te trimballes un tableau en plus, et qu'il faut le mettre à jour si tu modifies des formulaires dans ton code.
0
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008
21 oct. 2005 à 10:22
Effectivement l'idée est pas mal...

lagombe
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
21 oct. 2005 à 13:49
Voui, c'est l'orgie !



Il vaut mieux que tu découpes ton super-tableau $_SESSION[]. Je m'explique :



Pour garder les infos utilisateurs primordiales (login etc...) :

$_SESSION['user']['login'] = $login;

$_SESSION['user']['email'] = $email;

par exemple.



Et pour les infos temporaires (genre formulaire) :

$_SESSION['temp']['login'] = $temp_login;

$_SESSION['temp']['email'] = $temp_email;



Et quand t'en a plus besoin :

unset($_SESSION['temp']);





C'est tout aussi simple !
0
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008
21 oct. 2005 à 14:20
oui mais ça, ça marche pas dans mon cas, puisque je passe par une
boucle foreach pour faire passer les $_POST sur des $_SESSION (cf. le
code de arnal69130 http://www.phpcs.com/code.aspx?id=24433)...

lagombe
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
21 oct. 2005 à 14:50
Je ne me souviens plus du code de arnal, mais va falloir sans doute le modifier un peu aussi, pour sa boucle.

Sinon c'est la meilleure idée, oui :-)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
21 oct. 2005 à 15:56
Nan mais c'est tout bête ! Jvois pas ce que y'a de compliqué la dedand !



Ta boucle d'origine était :

"
<ol>
<li>if (!empty($_POST)) </li><li> { </li><li> foreach($_POST as $cle=>$val) </li><li> { $_SESSION[$cle]=$val; } </li><li> <var>unset</var>($_POST); </li><li> }"</li>
</ol>
Comme je rajoute un tableau dans $_SESSION[], ca va donner ca :

<?php

if ( !empty($_POST) ) {

foreach ($_POST as $cle=>$val) {

$_SESSION['temp'][$cle] = $val;

}

unset($_POST);

}

?>



Elle est ou la difficulté la dedand ? Rajouter 'temp' ?!
0
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008
21 oct. 2005 à 15:56
OK, nickel j'ai tout compris... même si je me fais un peu chambré sur
le coup... mais bon... c'est de bonne guerre... en attendant merci pour
les post ;-)

lagombe
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
21 oct. 2005 à 16:03
Je ne voulais pas être méchant.



Disons que c'est comme une équation : Quand tu rajoutes d'un coté, il ne faut pas oublier de faire la même chose de l'autre.

Une fois que tu auras compris, le code deviendra plus lisible pour toi ;)



J'espère =)
0
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008
21 oct. 2005 à 16:07
pas de souci, ma réponse concerné même plutôt le post de monoceros01,
donc vraiment pas de soucis... c'est tout simplement le métier qui
rentre ;-)

lagombe
0
Rejoignez-nous