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

AJAX Discussion :

[AJAX] Perte valeur de la variable de session


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 31
    Points : 21
    Points
    21
    Par défaut [AJAX] Perte valeur de la variable de session
    Bonjour,

    J'ai 3 listes déroulantes : région, département, zone IFN.
    Pour stocker la valeur des identifiants des listes, j'utilise des variables de session ($_SESSION['nvdisp']['cle_type_vegetaux'], $_SESSION['nvdisp']['cle_espece'] et $_SESSION['nvdisp']['cle_sous_espece']).

    Tout se passe bien pour initialiser ces variables suivant la sélection effectuée (dans tous les sens par exemple si je sélectionne une zone ifn cela met à jour les variables de sessions de la région et du département). Par contre, dans les listes déroulantes j'ai la possibilité de déselectionner un choix.

    Quand je déselectionne un département, je perd la valeur de la session de la région.

    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
     
    if( $_REQUEST['cle_departement']==0  )
      {
        echo "session cle_region : ".@$_SESSION['nvdisp']['cle_region'];
        unset($_SESSION['nvdisp']['cle_departement']);
        unset($_SESSION['nvdisp']['cle_zone_ifn']);
        $table="departement";
        $chp_cle="departement";
        $chp_val="nom_departement";
        $submit="goDpt_listedept();goDpt_listezoneifn();goDpt_listeregion();";
     
        $sql = $sql = "select distinct departement.* from departement where cle_region=".$_SESSION['nvdisp']['cle_region'];
        $resDEP = mysql_query($sql);
        $select = "<select style='width:300px' name='".$chp_cle."' id='".$chp_cle."' onchange='".$submit."'>";
        $select .= "<option value=0 >TS LES DEPARTEMENTS</option>";
        while($rowDEP = mysql_fetch_assoc($resDEP))
        {
          $select .= "<option value='".$rowDEP[ $chp_cle ]."' ".$selected." >".$rowDEP[ $chp_val ]."</option>";
        }
        $select .= "</selected>";
        echo $select;
      }
    Je ne vois pas l'erreur que j'ai commise.
    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,
    Je ne comprend pas vraiment ton souci mais essaie d'être plus clair sur ton problème.
    Quand je déselectionne un département, je perd la valeur de la session de la région.
    Ce n'est pas toi qui les supprime ici:
    unset($_SESSION['nvdisp']['cle_departement']);
    unset($_SESSION['nvdisp']['cle_zone_ifn']);
    Le code que tu nous montres est incomplète pour trouver le source de de ton problème.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Merci d'avoir répondu.
    En fait, je veux dire que quand je sélectionne la première option "TS LES DEPARTEMENTS", je supprime les variables de sessions $_SESSION['nvdisp']['cle_departement'] et $_SESSION['nvdisp']['cle_zone_ifn'] mais pas celle de la région $_SESSION['nvdisp']['cle_region'].
    Pourtant, je perd le contenu de cette variable de session.

    Voici le code ajax sur le changement de la liste déroulante département
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    function goDpt_listeregion()
    {
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('divregion').innerHTML = leselect;
    					}
    				}
     
            // Ici on va voir comment faire du post
    				xhr.open("POST","modif/ajaxRegion.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				sel = document.getElementById('departement');
    				iddepartement = sel.options[sel.selectedIndex].value;
        	  xhr.send("cle_departement="+iddepartement);
    }
     
    function goDpt_listedept()
    {
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('divdepartement').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","modif/ajaxDepartement.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				sel = document.getElementById('departement');
    				iddepartement = sel.options[sel.selectedIndex].value;
    				if(iddepartement==0)
    				{
    				  xhr.send("cle_departement="+iddepartement);
            }
    }
     
    function goDpt_listezoneifn()
    {
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('divzoneifn').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","modif/ajaxZoneIFN.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				sel = document.getElementById('departement');
    				iddepartement = sel.options[sel.selectedIndex].value;
    				xhr.send("cle_departement="+iddepartement);
    }
    Voici le code de la page "modif/ajaxRegion.php" sur le changement de la liste déroulante département
    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
    35
    36
    37
    38
    39
    40
    41
    42
     
    //MAJ depuis departement
    if( isset($_REQUEST['cle_departement'] ))
    {
      @$_SESSION['nvdisp']['cle_departement']=$_REQUEST['cle_departement'];
     
      $table="region";
      $chp_cle="cle_region";
      $chp_val="nom_region";
      $cle_sel=@$_SESSION['nvdisp']['cle_region'];
     
      $where="";
      $submit="goRegion_listeregion();goRegion_listedept();goRegion_listezoneifn();";
      echo "session cle_region : ".@$_SESSION['nvdisp']['cle_region'];
      if( isset($_SESSION['nvdisp']['cle_departement']) && $_SESSION['nvdisp']['cle_departement']!=0 )
      {
        $where .= "and departement='".$_SESSION['nvdisp']['cle_departement']."' ";
        //MAJ de la valeur session region
        $sql = "select cle_region from departement where departement=".$_SESSION['nvdisp']['cle_departement'];
        $resRegion= mysql_query($sql);
        $rowRegion = mysql_fetch_array($resRegion);
        @$_SESSION['nvdisp']['cle_region']=$rowRegion['cle_region'];
        $cle_sel=@$_SESSION['nvdisp']['cle_region'];
      }
      echo "session cle_region : ".@$_SESSION['nvdisp']['cle_region'];
      $sql = "select distinct region.* from region, departement where departement.cle_region=region.cle_region ".$where;
      $res = mysql_query( $sql );
      echo $sql;
      $select = "<select style=\"width:300px\" name='".$chp_cle."' id='".$chp_cle."' onchange='".$submit."'>";
      $select .= "<option value='0'>TTES LES REGIONS</option>";
      while( $rowREG = mysql_fetch_array( $res ))
      {
        $selected = "";
        if( $rowREG[ $chp_cle ] == $cle_sel )
        {
          $selected = "selected";
        }
        $select .= "<option value='".$rowREG[ $chp_cle ]."' ".$selected." >".$rowREG[ $chp_val ]."</option>";
      }
      $select .= "</selected>";
      echo $select;
    }
    Voici le code de la page "modif/ajaxZoneIFN.php" sur le changement de la liste déroulante département
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    //MAJ depuis departement
    if( isset($_REQUEST['cle_departement'] ))
    {
      @$_SESSION['nvdisp']['cle_departement']=$_REQUEST['cle_departement'];
      unset($_SESSION['nvdisp']['cle_zone_ifn']);
     
      //MAJ de la valeur session region
      $sql = "select cle_region from departement where departement=".$_SESSION['nvdisp']['cle_departement'];
      $resRegion= mysql_query($sql);
      $rowRegion = mysql_fetch_array($resRegion);
      @$_SESSION['nvdisp']['cle_region']=$rowRegion['cle_region'];
     
      $table="zone_ifn";
      $chp_cle="cle_zone";
      $chp_val="zone";
      $cle_sel=@$_SESSION['nvdisp']['cle_zone_ifn'];
      $where="";
      $submit="goZoneIFN_listezoneifn();goZoneIFN_listeregion();goZoneIFN_listedept();";
      if( isset($_SESSION['nvdisp']['cle_departement']) && $_SESSION['nvdisp']['cle_departement']!=0 )
      {
        $where = " where departement='".$_SESSION['nvdisp']['cle_departement']."'";
      }
      else
      {
        if( isset($_SESSION['nvdisp']['cle_region']) && $_SESSION['nvdisp']['cle_region']!=0 )
        {
          $where .= " where departement in ( select departement from departement where cle_region='".$_SESSION['nvdisp']['cle_region']."')";
        }
      }
     
      $select = "<select style='width:300px' name='".$chp_cle."' id='".$chp_cle."' onchange='".$submit."'>";
      $select .= "<option value=0 >TOUTES LES ZONES IFN</option>";
      $sql = "select distinct * from ".$table." ".$where." order by zone asc ";
      $resDEP = mysql_query($sql);
      while($rowDEP = mysql_fetch_assoc($resDEP))
      {
        $selected = "";
        if( $rowDEP[ $chp_cle ] == $cle_sel )
        {
          $selected = "selected";
        }
        $select .= "<option value='".$rowDEP[ $chp_cle ]."' ".$selected." >".$rowDEP[ $chp_val ]."</option>";
      }
      $select .= "</selected>";
      echo $select;
    }
    Merci de votre aide

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Salut !

    Est-ce que tu es sûr que l'identifiant de session est bien transmis par ta requête Ajax ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Dans la page "modif/ajaxDepartement.php", j'affiche le variable de session pour voir à quel moment je perd son contenu. Je garde la valeur de ma variable tout le temps sauf dans le cas où je choisi la première option.
    J'espère être claire dans mes explications.
    Merci de ton aide.

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Re,
    $_REQUEST['cle_departement']
    Utilises $_POST.
    Vires les @ devant les variables $_SESSION pour qu'il affiche les erreurs s'il y en a.
    if(iddepartement==0)
    {
    xhr.send("cle_departement="+iddepartement);
    }
    Tu ne l'envoies que si iddepartement==0 ?
    $sql = "select cle_region from departement where departement=".$_SESSION['nvdisp']['cle_departement'];
    $resRegion= mysql_query($sql);
    $rowRegion = mysql_fetch_array($resRegion);
    @$_SESSION['nvdisp']['cle_region']=$rowRegion['cle_region'];
    Tu es sûr que cette requête retourne un enregistrement?

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    J'ai fait comme tu m'a conseillé, j'ai remplacé les $_REQUEST par $_POST et supprimer les "@". J'ai toujours la même erreur.

    if(iddepartement==0)
    {
    xhr.send("cle_departement="+iddepartement);
    }
    Je ne mets à jour la liste déroulante département que quand l'utilisateur a choisi l'option "Tous les départements". Je la mets à jour par rapport à la valeur de la région ($_SESSION['nvdisp']['cle_region']).

    $sql = "select cle_region from departement where departement=".$_SESSION['nvdisp']['cle_departement'];
    $resRegion= mysql_query($sql);
    $rowRegion = mysql_fetch_array($resRegion);
    @$_SESSION['nvdisp']['cle_region']=$rowRegion['cle_region'];
    Cette requête n'est effectué que dans le cas où le département n'est pas vide ou égal à 0.

    Merci pour ton aide

  8. #8
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Heu... pardon si l'observation parait stupide mais je ne vois pas de session_start();

    ERE
    Quand une tête pense seule, elle devient folle.

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Cette requête n'est effectué que dans le cas où le département n'est pas vide ou égal à 0.
    if(iddepartement==0)
    {
    xhr.send("cle_departement="+iddepartement);
    }
    La requête n'est pas effectué que si et seulement si iddepartement==0.

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    J'ai mis des "session_start()" au début de chacune de mes pages (ajaxRegion.php, ajaxDepartement.php, ajaxZoneIFN.php).

    Alors pour la gestion de la liste déroulante département j'ai fait comme ça. Sur le onchange, j'appelle 3 fonctions :
    - goDpt_listedept() : met à jour la liste déroulante département seulement si option=0. Appel de la page ajaxDepartement.php avec en paramètre cle_departement="valeur option".
    - goDpt_listezoneifn() : met à jour la liste déroulante zone ifn. Appel de la page ajaxZoneIFN.php avec en paramètre cle_departement="valeur option".
    - goDpt_listeregion() : met à jour la liste déroulante région. Appel de la page ajaxRegion.php avec en paramètre cle_departement="valeur option".

    En espérant avoir bien retranscrit ma réflexion .

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/05/2008, 13h56
  2. Réponses: 5
    Dernier message: 15/05/2008, 17h40
  3. Valeur d'un variable de session modifiée
    Par waxman1 dans le forum Langage
    Réponses: 2
    Dernier message: 19/11/2006, 13h22
  4. Réponses: 7
    Dernier message: 18/10/2006, 21h34
  5. Comment recuperer la valeur d'une variable de session avec du javascript
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/09/2006, 10h40

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