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 23/05/2006, 23h40   #1
Invité de passage
 
Inscription : août 2005
Messages : 59
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 59
Points : 4
Points : 4
Par défaut Variables de session qui se vident !

Bonjour à toutes et tous,

J'ai un problème avec un formulaire que j'essaie d'envoyer par email, avec les données des champs que je place dans des variables de session mais qui se vident mystérieusement à la fin!

Voici mon code, composé d'une page (index.php) contenant un formulaire, d'une page (coordonnees.php) contenant les coordonnées de l'internaute et enfin, d'une page (envoi.php) qui sert a envoyer le mail:

index.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? 
session_start;
?>
... un ensemble de listes déroulantes, les variables étant sous la forme variable1_1_1, variable1_1_2, variable1_1_3, variable1_1_4, puis de nouveau variable1_2_1, variable1_2_2, ... jusqu'à variable1_15_4 :
<FORM method="POST" action="coordonnees.php">
       <select name="variable1_1_1" id="variable1_1_1">
          <option value="rien;" selected>rien;</option>
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
          <option value="6">6</option>
          <option value="7">7</option>
      </select>
<INPUT type="submit" value="valider">
  </FORM>
...

coordonnees.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
on attribue aux variables de session les valeurs du formulaires de la page précédente:
for($i=1;$i<=15;$i++){
    for($j=1;$j<=4;$j++){
    if (empty($_SESSION["variable1_".$i."_".$j])) {
        $_SESSION["variable1_".$i."_".$j]=${variable1_.$i._.$j};
        test d'affichage des variables de session pour voir si elles sont bien remplies (le test est OK !):
        echo $_SESSION["variable1_".$i."_".$j]."\n";
        }
    }
}
?>
  <FORM method="POST" action="envoi.php">
 <P align="center">Votre nom et prénom:<br>
  <INPUT type="text" name="nom" size=30>
  </p>
  <P align="center">Votre adresse E-Mail:<br>
  <INPUT type="text" name="email" size=30>
  </p>
  <P align="center">Votre adresse postale:<br>
  <textarea name="adresse" cols=30 rows=5></textarea>
  <P align="center">
    <INPUT type="submit" value="Envoyer">
  </FORM>

envoi.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?
for($i=1;$i<=15;$i++){
    for($j=1;$j<=4;$j++){
        test pour voir si les variables de sessions sont toujours remplies mais elles ne le sont plus à cet instant !
       echo $_SESSION["variable1_".$i."_".$j];
    }
}   
  $msg = "Nom:\t$nom\n";
  $msg .= "E-Mail:\t$email\n";
  $msg .= "Adresse:\t$adresse\n\n";
 
   for($i=1;$i<=15;$i++){
    for($j=1;$j<=4;$j++){
    $msg .=$_SESSION["variable1_".$i."_".$j];
    $msg .=" - ";
    }
    $msg .="\n";
}
 
  $recipient = "monmail@site.com";
  $subject = "Formulaire";
 
  $mailheaders = "From: Mon test de formulaire<> \n";
  $mailheaders .= "Reply-To: $email\n\n";
 
  mail($recipient, $subject, $msg, $mailheaders);
 
  echo "<HTML><HEAD>";
  echo "<TITLE>Formulaire envoyé!</TITLE></HEAD><BODY>";
  echo "<H1 align=center>Merci, $nom </H1>";
  echo "<P align=center>";
  echo "Votre formulaire à bien été envoyé !</P>";
  echo "</BODY></HTML>";
    ?>

Voila mon code, et je ne comprends pas pourquoi mes variables $_SESSION["variable1_".$i."_".$j] sont remplies et s'affichent en haut de ma page coordonnees.php mais sont vides en arrivant dans envoi.php ?

SI vous avez de quelconques informations, cela m'aiderait enormement!

merci
navona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 00h38   #2
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Je viens d'avoir un problème similaire, j'ai pas approfondi ton code, mais personnellement mon problème venait du fait que j'avais dans la page des variables ayant le même nom que celle de la session, qui était aussi mystérieusement effacée.

Par exemple $_SESSION['pseudo'] récupérée à l'identification disparaissait après avoir visité la page commentaire, où chaque commentaire comprend justement un pseudo récupéré après une requête sql en faisant $pseudo=$resultat_de_la_requete[champ_pseudo].

Du coup ma variable de session nommée pseudo disparaissait.

Si ça peut t'aider...
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 03h56   #3
Membre émérite
 
Avatar de ozzmax
 
Inscription : novembre 2005
Messages : 986
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : novembre 2005
Messages : 986
Points : 863
Points : 863
Envoyer un message via MSN à ozzmax
je suis du meme avis que psychoBob
j'avais déjà fait un post sur ce probleme, et dans une des page j,utilisais une variable $user mais le trouble est que j'en avait déjà une $_session['user']...la variable session prennait meme une autre valeur!

vérifie ca
__________________
La perfection n'est pas un but, l'amélioration constante devrait l'être!
La position des Développeurs de developpez avec les explications
ozzmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 13h50   #4
Invité de passage
 
Inscription : août 2005
Messages : 59
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 59
Points : 4
Points : 4
alors, je n'ai pas remis mes "session_start" car j'ai condensé mais je les avais mis dans mes vraies pages et j'ai donc changé les noms pour avoir le nom de ma variable de formulaire différent de celui de la variable de session!

mais rien n'y fait! à ma page coordonnees.php, mon test fonctionne et mes variables s'affichent bien avec le "echo", mais dans la troisième page envoi.php, le test ne fonctionne plus puisque mon "echo" n'affiche plus rien !

du coup, mon email ne contient pas non plus les données des variables de sessions pusiqu'elles se vident entre la deuxieme et troisieme page!
navona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 13h58   #5
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Pour que ce soit plus lisible pense au balise code
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 13h59   #6
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
Le probleme soulevé par psychoBob et ozzmax vient de notre chere option "variables globales" à on.
Si cette option est activée, pour php, $_SESSION['toto'] est une référence sur $toto.
Donc si on modifie $toto, $_SESSION['toto'] ramasse aussi.
Oui PHP est un petit peu c** avec cette option à on
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 14h12   #7
Membre régulier
 
Inscription : mai 2006
Messages : 60
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mai 2006
Messages : 60
Points : 73
Points : 73
Envoyer un message via Skype™ à Tiois
Penses aussi a appeler la fonction session_write_close() a la fin de ta page, pour que la session soit enregistree avant le redirect de page. Mais je crois que le probleme vient de REGISTER_GLOBALS a ON. J'ai déja eu ce problème.
Tiois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 14h24   #8
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Citation:
Envoyé par Tiois
Penses aussi a appeler la fonction session_write_close() a la fin de ta page, pour que la session soit enregistree avant le redirect de page. Mais je crois que le probleme vient de REGISTER_GLOBALS a ON. J'ai déja eu ce problème.
Tu peux en dire plus sur session_write_close(), Tiois ? Tu l'utilises pourquoi toi au juste ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 14h27   #9
Invité de passage
 
Inscription : août 2005
Messages : 59
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 59
Points : 4
Points : 4
merci a tous, mais comment sait-on si cette option "variable globale" est a ON ou OFF et comment la changer?
navona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 15h09   #10
Membre émérite
 
Avatar de ozzmax
 
Inscription : novembre 2005
Messages : 986
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : novembre 2005
Messages : 986
Points : 863
Points : 863
Envoyer un message via MSN à ozzmax
cé dans le php.ini que tu modifie la variable de register_globals = off;
__________________
La perfection n'est pas un but, l'amélioration constante devrait l'être!
La position des Développeurs de developpez avec les explications
ozzmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 17h46   #11
Invité de passage
 
Inscription : août 2005
Messages : 59
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 59
Points : 4
Points : 4
merci bien, mais helas, je n'ai pas acces a ce ficher car j'ai un serveur mutualisé et mon hebergeur ne me donne pas cette possibilite! et a priori, cette valeur est bien a ON en plus!!!
navona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 19h09   #12
Membre émérite
 
Avatar de ozzmax
 
Inscription : novembre 2005
Messages : 986
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : novembre 2005
Messages : 986
Points : 863
Points : 863
Envoyer un message via MSN à ozzmax
ouais dommage
mais je ne sais pas si par défaut il met cette valeur a ON

Bref je ne peux pas vraiment t'aider si c'est le cas
__________________
La perfection n'est pas un but, l'amélioration constante devrait l'être!
La position des Développeurs de developpez avec les explications
ozzmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 21h38   #13
Membre régulier
 
Inscription : mai 2006
Messages : 60
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mai 2006
Messages : 60
Points : 73
Points : 73
Envoyer un message via Skype™ à Tiois
session_write_close() sert à enregistrer la session et la fermer. Lorsqu'on redirige le client sur une autre page, on doit toujours enregistrer la session pour etre sur de ne pas perdre les valeurs.

Par exemple:

avant un Header("Location: ../index.php?login=success"); , on devrait mettre ceci:

session_write_close();
Header("Location: ../index.php?login=success");

Aussi, pour le nom de tes variables session, n'utilise pas les noms qui sont passés par URL ou en POST pour déclarer tes variables sessions, car avec REGISTER_GLOBALS à ON, si tu as par exemple un POST d'un formulaire contenant un champs appelé "nom" et que dans ta session tu utilise $_SESSION["nom"], $_SESSION["nom"] prendra la valeur du champs "nom" de ton formulaire.

Bonne chance !
Tiois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 22h39   #14
Invité de passage
 
Inscription : août 2005
Messages : 59
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 59
Points : 4
Points : 4
merci beaucoup a vous tous!

je vais donc essayer differemment car je ne vois toujours pas pourquoi en passant de coordonnees.php a envoi.php mes variables de sessions se vident apparemment alors que mon formulaire de coordonnees.php ne contient pas de champs avec le meme nom que mes variables!
navona est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h12.


 
 
 
 
Partenaires

Hébergement Web