Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
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 15/04/2011, 10h52   #1
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Par défaut 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 :
$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 :
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 :
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 :
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 :
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 :
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.
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 12h29   #2
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
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.
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h00   #3
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
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 :
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 :
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 :
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 :
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.
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h55   #4
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
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 :
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 :
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...
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h07.


 
 
 
 
Partenaires

Hébergement Web