Variable de session non réaffectée

Eléphanteau du PHP | 24 Messages

21 avr. 2011, 16:00

include_once("../../fichiersInclusion/classes.php");
fait appel au fichier classes.php qui contient la définition de toutes mes classes

Eléphanteau du PHP | 24 Messages

21 avr. 2011, 16:13

Dans mon fichier "types.inc", je fais ceci :
...
 list($jourEve, $moisEve, $anneeEve) = explode('/', $dateEve);
...
echo "...
		 Date :
		 <select name='requiredjour' id='jour' tabindex='1' onChange=\"if(document.forms.enregTypesRey.dejaControle.value == 1) {CheckDate(document.forms.enregTypesRey.jour, document.forms.enregTypesRey.mois, document.forms.enregTypesRey.annee, '2007', '3007', document.forms.enregTypesRey.dejaControle); dateInfJour(document.forms.enregTypesRey.jour, document.forms.enregTypesRey.mois, document.forms.enregTypesRey.annee); majAge('A');}\">";

affOptDate($jourEve, 'J');

echo "		    </select>
		 /
			<select name='requiredmois' id='mois' tabindex='2' onChange=\"if(document.forms.enregTypesRey.dejaControle.value == 1) {CheckDate(document.forms.enregTypesRey.jour, document.forms.enregTypesRey.mois, document.forms.enregTypesRey.annee, '2007', '3007', document.forms.enregTypesRey.dejaControle); dateInfJour(document.forms.enregTypesRey.jour, document.forms.enregTypesRey.mois, document.forms.enregTypesRey.annee); majAge('A');}\">";

affOptDate($moisEve, 'M');

echo "		    </select>
		 /
			<select name='requiredannee' id='annee' tabindex='3' onChange=\"CheckDate(document.forms.enregTypesRey.jour, document.forms.enregTypesRey.mois, document.forms.enregTypesRey.annee, '2007', '3007', document.forms.enregTypesRey.dejaControle); dateInfJour(document.forms.enregTypesRey.jour, document.forms.enregTypesRey.mois, document.forms.enregTypesRey.annee); majAge('A');\">";

affOptDate($anneeEve, 'Y');

echo "			</select>
[/code]

Code dela fonction affOptDate() : 

[code]function affOptDate($partDate, $txt)
 {
  $limiteInf = 1;

  if($txt == 'J')		/*si jour*/
   $limiteSup = 31;
  elseif($txt == 'M')	/*si mois*/
   $limiteSup = 12;
  else					/*si année*/
   {
    $limiteInf = $partDate - 2;
	  $limiteSup = date("Y");
   }

  for($i = $limiteInf; $i <= $limiteSup; $i++)
   {
    echo "<option value='";

	  if($i < 10)
	   echo "0";

	  echo $i . "'";

	  if($partDate == $i)
	   echo "selected";

	  echo ">";

	  if($i < 10)
	   echo "0";

	  echo $i ."</option>";
   }
 }

Ceci me permet d'avoir la date (jour, mois année chacune dans une listbox) normalement ;-) correctement sélectionnée si un la date de la varaible de session existe, sinon c'est la date du jour qui est sélectionnée.

Eléphant du PHP | 92 Messages

21 avr. 2011, 16:13

re :
Juste une question,

Comment est ce que tu fais pour vérifier que la date dans le formulaire est toujours l'ancienne ?
Programmer c'est 20% de syntaxe pour 80% de réflexion et dans les 20% de syntaxe il faut encore compter une bonne dose de réflexion...
Je vous donne des conseils, pas des solutions toutes faites...

Eléphanteau du PHP | 24 Messages

21 avr. 2011, 16:32

Je viens également de me rendre compte qu'il n'y a pas que la date qui n'est est modifiée, mais toutes les autres propoiétés de l'objet ne le sont pas également, même si je les modifie via le formulaire. Bug qui reste logique... mais où se situe-t-il? That is the question...

Eléphant du PHP | 92 Messages

21 avr. 2011, 16:34

La raison pour laquelle je te demande comment est ce que tu vérifies ton problème est simplement parce que je commence à me dire que si ça se trouve ca n'est qu'un pb de cache dans ton navigateur...
Programmer c'est 20% de syntaxe pour 80% de réflexion et dans les 20% de syntaxe il faut encore compter une bonne dose de réflexion...
Je vous donne des conseils, pas des solutions toutes faites...

Eléphanteau du PHP | 24 Messages

21 avr. 2011, 16:51

Je viens de faire le test suivant :

- ouverture du formulaire
- suppression du cache du navigateur
- changement de la date
- ouverture du second formulaire via le lien
- ouverture du premier formulaire via le lien

La date n'a pas été modifiée.

Apparemment, ça ne viendrait pas de là non plus... sniff et dur, dur...

Eléphanteau du PHP | 24 Messages

22 avr. 2011, 10:06

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 : Tout sélectionner

... $_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 : Tout sélectionner

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 : Tout sélectionner

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 : Tout sélectionner

<?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.

Eléphanteau du PHP | 24 Messages

22 avr. 2011, 10:57

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 : Tout sélectionner

... 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 : Tout sélectionner

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...

Merci beaucoup pour tout le temps que tu as passé à m'aider, Maskime