IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Variables de session qui se vident !


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 59
    Points : 21
    Points
    21
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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...

  3. #3
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    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

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    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!

  5. #5
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Pour que ce soit plus lisible pense au balise code

  6. #6
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    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

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 66
    Points
    66
    Par défaut
    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.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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 ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    merci a tous, mais comment sait-on si cette option "variable globale" est a ON ou OFF et comment la changer?

  10. #10
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    cé dans le php.ini que tu modifie la variable de register_globals = off;

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    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!!!

  12. #12
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    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

  13. #13
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 66
    Points
    66
    Par défaut
    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 !

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    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!

Discussions similaires

  1. variables de session qui se vident
    Par QAYS dans le forum Langage
    Réponses: 13
    Dernier message: 29/10/2011, 22h16
  2. variables de sessions qui ne restent pas
    Par seb67110 dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2007, 11h54
  3. Variable de sessions qui disparaissent (pseudo-frames)
    Par lecharcutierdelinux dans le forum Langage
    Réponses: 11
    Dernier message: 09/02/2007, 22h25
  4. variables de session qui ne passent pas
    Par cels dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/11/2006, 10h46
  5. Réponses: 4
    Dernier message: 13/03/2006, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo