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] Variable de session non modifiée


Sujet :

AJAX

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut [AJAX] Variable de session non modifiée
    Bonjour,

    Dans un premier formulaire Php, nommé "types.inc", j'ai une date automatiquement initialisée avec la date contenue dans l'objet passé en variable de session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dateEve = $_SESSION['objet']->getDateEve();

    J'ai la possibilité de modifier cette date dans le formulaire.

    Si je la modifie et que je j'enregistre directement le formulaire, pas de problème, la date est modifiée. Par contre, si je modifie la date dans le formulaire "types.inc" et que je cliques sur un hyperlien pour me rendre dans un autre formulaire en enregistrant préalablement les données du formulaire, c'est la date initiale qui est reprise au lieu de la date modifiée, alors que je mets bien ma variable de session à jour :

    Dans mon script "types.inc", voici l'hyperlien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick=\"enregiTypesRey(); window.location.href='../interfaces/interface.php?fichier=../fichiersInclusion/rey/zones.inc&titre=Figure de Rey&popup=1';\">Zones</a>

    Dans ma fonction Ajax "enregiTypesRey()" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    xhrEnregiTypesRey.open("POST",'../transferts/rey/enregiTypesRey.php',true);
    ...
    jour = document.getElementById('jour');
    jourEve = jour.options[jour.selectedIndex].value;
    mois = document.getElementById('mois') ;
    moisEve = mois.options[mois.selectedIndex].value;
    annee = document.getElementById('annee');
    anneeEve = annee.options[annee.selectedIndex].value;
    ...
    xhrEnregiTypesRey.send("id=" + id + "&idPrinc=" + idPrinc + "&jourEve=" + jourEve + "&moisEve=" + moisEve + "&anneeEve=" + anneeEve ...
    Dans mon fichier "enregiTypesRey.php" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    $obj = unserialize($_SESSION['eve']);
    ...
    $tab['dateEve'] = $_POST['anneeEve'] . "-" . $_POST['moisEve'] . "-" . $_POST['jourEve'];
     
    $obj->setDateEve($tab['dateEve']); //Pour éviter les problèmes de date avec l'interface zones
    ...
    unset($_SESSION['eve']);//Car problème de mise à jour de la date dans la session
     
    $_SESSION['eve'] = serialize($obj);  //Pour éviter les problèmes de date avec l'interface zones
    Dans ma méthode "setDateEve" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function setDateEve($dateEve)
       {
        $this->dateEve = $dateEve;
        //Ajouté 4 lignes suivantes car problème d'enregistrement de la date dans le test Figure de Rey
        $tab['dateEve'] = $dateEve;
        $tab['idObj'] = $this->id;
     
        $transaction = CtransactionsBdd::GetInstance("MYSQL", "neuropsy");
        $resuReq = $transaction->update("MYSQL_enregDateObj", $tab);
       }
    Pour terminer, dans mon formulaire "zones.inc" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(!empty($_SESSION['eve']))
     {
      $eve = unserialize($_SESSION['eve']);
      ...
      list($jourEve, $moisEve, $anneeEve) = explode('/', $eve->getDateEve());

    Et là, c'est l'ancienne date qui apparaît au lieu de la nouvelle.

    Quelqu'un aurait une idée?

    Merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Je viens de remarquer que le problème de date n'est pas systématique.

    De temps à autre, je modifie la date dans le premier formulaire, je me rends dans le second via le lien, je reviens dans le premier et la date est la date initiale et non la modifiée.

    Je refais alors la manoeuvre en re-modifiant la date et là, miracle, c'est OK. Donc, le problème est aléatoire, ce qui rend la chose encore plus complexe.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    La date initiale dans mon formulaire "types.inc" était le 01/04/2011.

    Je viens de faire le test suivant : dans mon fichier "enregiTypesRey.php", j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    $_SESSION['eve'] = serialize($obj);  //Pour éviter les problèmes de date avec l'interface zones 
     
    echo $_SESSION['eve'];
    et dans ma fonction js "enregiTypesRey()" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       xhrEnregiTypesRey.onreadystatechange = function()
        {
         if(xhrEnregiTypesRey.readyState == 4 && xhrEnregiTypesRey.status == 200)
          { alert(xhrEnregiTypesRey.responseText);
           document.getElementById('erreur').innerHTML = xhrEnregiTypesRey.responseText;
          }
    et j'ai empêché la redirection sur le javascript du lien dans "types.inc" en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick=\"enregiTypesRey(); //window.location.href='../interfaces/inter

    Dans mon formulaire, j'ai modifié la date en 08/04/2011, puis j'ai cliqué sur le lien. La date de l'objet dans la session est bien modifiée car j'obtiens l'affichage suivant :

    "O:6:"CObjet":13:{s:10:"CObjetid";s:2:"36";
    s:17:"CObjetidObjPere";s:2:"24";
    s:13:"CObjetidPat";s:1:"2";
    s:15:"CObjetdateEve";s:10:"2011-04-08";
    s:16:"CObjettypeTest";s:1:"4";
    s:19:"CObjetprestataire";s:1:"1";
    s:14:"CObjetgroupe";i:2;
    s:16:"CObjetsupprime";N;
    s:13:"CObjettitre";s:13:"Figure de Rey";
    s:15:"CObjetfichier";s:34:"../fichiersInclusion/rey/types.inc";
    s:13:"CObjeticone";s:25:"../images/ico_eveFils.gif";
    s:15:"CObjeteveCorr";O:4:"CRey":61:{s:8:"CReyid";s:1:"2";
    s:11:"CReyidObj";s:2:"36";
    s:15:"CReytypeCopie";s:1:"3";
    s:15:"CReypercCopie";s:2:"25";
    s:14:"CReytypeRepr";s:1:"4";
    s:14:"CReypercRepr";s:2:"50";
    s:14:"CReyzone1cop";s:3:"0.5";
    s:15:"CReyzone1repr";s:2:"-1";
    s:14:"CReyzone2cop";s:3:"0.5";
    s:15:"CReyzone2repr";s:2:"-1";
    s:14:"CReyzone3cop";s:1:"1";
    s:15:"CReyzone3repr";s:2:"-1";
    s:14:"CReyzone4cop";s:2:"-1";
    s:15:"CReyzone4repr";s:2:"-1";
    s:14:"CReyzone5cop";s:2:"-1";
    s:15:"CReyzone5repr";s:2:"-1";
    s:14:"CReyzone6cop";s:2:"-1";
    s:15:"CReyzone6repr";s:2:"-1";
    s:14:"CReyzone7cop";s:2:"-1";
    s:15:"CReyzone7repr";s:2:"-1";
    s:14:"CReyzone8cop";s:2:"-1";
    s:15:"CReyzone8repr";s:2:"-1";
    s:14:"CReyzone9cop";s:2:"-1";
    s:15:"CReyzone9repr";s:2:"-1";
    s:15:"CReyzone10cop";s:2:"-1";
    s:16:"CReyzone10repr";s:2:"-1";
    s:15:"CReyzone11cop";s:2:"-1";
    s:16:"CReyzone11repr";s:2:"-1";
    s:15:"CReyzone12cop";s:2:"-1";
    s:16:"CReyzone12repr";s:2:"-1";
    s:15:"CReyzone13cop";s:2:"-1";
    s:16:"CReyzone13repr";s:2:"-1";
    s:15:"CReyzone14cop";s:2:"-1";
    s:16:"CReyzone14repr";s:2:"-1";
    s:15:"CReyzone15cop";s:2:"-1";
    s:16:"CReyzone15repr";s:2:"-1";
    s:15:"CReyzone16cop";s:2:"-1";
    s:16:"CReyzone16repr";s:2:"-1";
    s:15:"CReyzone17cop";s:2:"-1";
    s:16:"CReyzone17repr";s:2:"-1";
    s:15:"CReyzone18cop";s:2:"-1";
    s:16:"CReyzone18repr";s:2:"-1";
    s:19:"CReyrichesseCopie";N;
    s:23:"CReycompRichesseCopie";s:1:" ";
    s:12:"CReytpsCop";N;
    s:16:"CReypercentile";s:1:" ";
    s:21:"CReyrichesseMemoire";N;
    s:25:"CReycompRichesseMemoire";s:1:" ";
    s:10:"CObjetid";N;
    s:17:"CObjetidObjPere";N;
    s:13:"CObjetidPat";N;
    s:15:"CObjetdateEve";N;
    s:16:"CObjettypeTest";N;
    s:19:"CObjetprestataire";N;
    s:14:"CObjetgroupe";N;
    s:16:"CObjetsupprime";N;
    s:13:"CObjettitre";N;
    s:15:"CObjetfichier";N;
    s:13:"CObjeticone";N;
    s:15:"CObjeteveCorr";N;
    s:13:"CObjettable";N;}
    s:13:"CObjettable";s:4:"reys";}"

    Ensuite, j'ai supprimé l'alerte dans la fonction js et réactivé la redirection dans le js du lien.

    Dans mon fichier zones.inc, en début de fichier, j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    if(strlen(session_id()) == 0)
     session_start();
     
    if(is_string ($_SESSION['patient']))
     $pat = unserialize($_SESSION['patient']);
    else
     $pat = $_SESSION['patient'];
     
     
    echo "1. " . $_SESSION['eve'];
    ...
    J'ai refais la même opération que précédemment, et là la date dans la variable de session n'est pas correcte car j'obtiens l'affichage suivant :

    "1. O:6:"CObjet":13:{s:10:"�CObjet�id";s:2:"36";
    s:17:"�CObjet�idObjPere";s:2:"24";
    s:13:"�CObjet�idPat";s:1:"2";
    s:15:"�CObjet�dateEve";s:10:"2011-04-01";
    s:16:"�CObjet�typeTest";s:1:"4";
    s:19:"�CObjet�prestataire";s:1:"1";
    s:14:"�CObjet�groupe";i:2;
    s:16:"�CObjet�supprime";N;
    s:13:"�CObjet�titre";s:13:"Figure de Rey";
    s:15:"�CObjet�fichier";s:34:"../fichiersInclusion/rey/types.inc";
    s:13:"�CObjet�icone";s:25:"../images/ico_eveFils.gif";
    s:15:"�CObjet�eveCorr";O:4:"CRey":61:{s:8:"�CRey�id";s:1:"2";
    s:11:"�CRey�idObj";s:2:"36";
    s:15:"�CRey�typeCopie";s:1:"3";
    s:15:"�CRey�percCopie";s:2:"25";
    s:14:"�CRey�typeRepr";s:1:"4";
    s:14:"�CRey�percRepr";s:2:"50";
    s:14:"�CRey�zone1cop";s:3:"0.5";
    s:15:"�CRey�zone1repr";s:2:"-1";
    s:14:"�CRey�zone2cop";s:3:"0.5";
    s:15:"�CRey�zone2repr";s:2:"-1";
    s:14:"�CRey�zone3cop";s:1:"1";
    s:15:"�CRey�zone3repr";s:2:"-1";
    s:14:"�CRey�zone4cop";s:2:"-1";
    s:15:"�CRey�zone4repr";s:2:"-1";
    s:14:"�CRey�zone5cop";s:2:"-1";
    s:15:"�CRey�zone5repr";s:2:"-1";
    s:14:"�CRey�zone6cop";s:2:"-1";
    s:15:"�CRey�zone6repr";s:2:"-1";
    s:14:"�CRey�zone7cop";s:2:"-1";
    s:15:"�CRey�zone7repr";s:2:"-1";
    s:14:"�CRey�zone8cop";s:2:"-1";
    s:15:"�CRey�zone8repr";s:2:"-1";
    s:14:"�CRey�zone9cop";s:2:"-1";
    s:15:"�CRey�zone9repr";s:2:"-1";
    s:15:"�CRey�zone10cop";s:2:"-1";
    s:16:"�CRey�zone10repr";s:2:"-1";
    s:15:"�CRey�zone11cop";s:2:"-1";
    s:16:"�CRey�zone11repr";s:2:"-1";
    s:15:"�CRey�zone12cop";s:2:"-1";
    s:16:"�CRey�zone12repr";s:2:"-1";
    s:15:"�CRey�zone13cop";s:2:"-1";
    s:16:"�CRey�zone13repr";s:2:"-1";
    s:15:"�CRey�zone14cop";s:2:"-1";
    s:16:"�CRey�zone14repr";s:2:"-1";
    s:15:"�CRey�zone15cop";s:2:"-1";
    s:16:"�CRey�zone15repr";s:2:"-1";
    s:15:"�CRey�zone16cop";s:2:"-1";
    s:16:"�CRey�zone16repr";s:2:"-1";
    s:15:"�CRey�zone17cop";s:2:"-1";
    s:16:"�CRey�zone17repr";s:2:"-1";
    s:15:"�CRey�zone18cop";s:2:"-1";
    s:16:"�CRey�zone18repr";s:2:"-1";
    s:19:"�CRey�richesseCopie";N;
    s:23:"�CRey�compRichesseCopie";s:1:" ";
    s:12:"�CRey�tpsCop";N;
    s:16:"�CRey�percentile";s:1:" ";
    s:21:"�CRey�richesseMemoire";N;
    s:25:"�CRey�compRichesseMemoire";s:1:" ";
    s:10:"�CObjet�id";N;
    s:17:"�CObjet�idObjPere";N;
    s:13:"�CObjet�idPat";N;
    s:15:"�CObjet�dateEve";N;
    s:16:"�CObjet�typeTest";N;
    s:19:"�CObjet�prestataire";N;
    s:14:"�CObjet�groupe";N;
    s:16:"�CObjet�supprime";N;
    s:13:"�CObjet�titre";N;
    s:15:"�CObjet�fichier";N;
    s:13:"�CObjet�icone";N;
    s:15:"�CObjet�eveCorr";N;
    s:13:"�CObjet�table";N;}
    s:13:"�CObjet�table";s:4:"reys";}"

    Ce que je ne parviens pas à comprendre, c'est qu'au moment de l'utilisation de l'Ajax, lors du retour du traitement de mon fichier enregiTypesRey.php, le contenu de ma variable de session est bien correct et que, sans plus y toucher, après le traitement Ajax et la redirection qui suit, le contenu n'est plus correct.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Je viens de trouver la solution, mais je ne m'explique toujours pas l'origine du problème.

    En codant plus "proprement", à savoir en mettant la redirection dans la fonction js "enregiTypesRey()" et non dans le js du lien, j'ai résolu le problème :

    - dans "types.inc" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    echo "\n   <form name='enregTypesRey' method='post' action=\"javascript:enregiTypesRey('pasRedir');\">
       <center><a href='#' onclick=\"enregiTypesRey('pasRedir');\">Types</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='#' onclick=\"enregiTypesRey('redir');\">Zones</a></center><br><br>
    ...
    - ma fonction "enregiTypesRey()" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function enregiTypesRey(suite)
     {
       xhrEnregiTypesRey=getXhr();
       xhrEnregiTypesRey.onreadystatechange = function()
        {
         if(xhrEnregiTypesRey.readyState == 4 && xhrEnregiTypesRey.status == 200)
          {
           document.getElementById('erreur').innerHTML = xhrEnregiTypesRey.responseText;
     
           if(suite == 'redir')
            window.location.href='../interfaces/interface.php?fichier=../fichiersInclusion/rey/zones.inc&titre=Figure de Rey&popup=1';
          }
        }
    ...
    C'est résolu, mais je ne m'explique pas le pourquoi du problème...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 27
    Dernier message: 16/04/2013, 11h09
  2. Variable de sessions non transférées
    Par MaT$oN dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2008, 14h04
  3. Variables de sessions non transmises en local
    Par cerveza dans le forum Langage
    Réponses: 5
    Dernier message: 31/12/2007, 21h34
  4. Variable de session non rafraîchie
    Par Akela dans le forum Langage
    Réponses: 6
    Dernier message: 17/10/2007, 15h44
  5. [AJAX] Variables de session
    Par escteban dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 03/05/2007, 16h47

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