problèmes de sessions et de variables [- soucis Mis à Jour -]

problèmes de sessions et de variables [- soucis Mis à Jour -] - PHP - Programmation

Marsh Posté le 02-09-2008 à 11:47:28    

Bonjour,  
 
voici ce qui se passe :  
J'ai un site avec une adresse du type : http://www.monsite.com/index.php?ville=ma_ville
je récupère alors la var ville et je fais une recherche dans ma base de données, pour récupérer un ID.
 
Je dois ensuite l'enregistrer dans une session pour la passer à $GLOBALS["id"] (note : $GLOBALS["id"] est non négociable, je suis obligé de me servir de ça.)
 
D'une part, celà ne fonctionne pas tout de suite, je dois faire une F5 pour que ma session soit effectivement remplie avec mon id_ville.
D'autre part, lorsque je lance le même site avec une autre ville, j'ai le même id. Je le conçoit aisement car je ne renseigne que $_SESSION['id_ville'] = 'n';
 
J'ai donc essayé de déclarer comme suit : $_SESSION['id_ville_' . $idv[0] . ''] = $idv[0]; mais là, ça fonctionne carémment pas.
 
Si quelqu'un peut maider donc, sur ces sessions, je suis preneur.
 
Merci


Message édité par xkamui le 12-09-2008 à 15:42:07
Reply

Marsh Posté le 02-09-2008 à 11:47:28   

Reply

Marsh Posté le 02-09-2008 à 11:56:10    

déjà :  
$_SESSION reste le meme d'un chargement a l'autre
$_GLOBALS est réinitialisé a chaque nouvelle page
 
et pourquoi pas un simple $_SESSION['maVilleAMoiQueJai'] = $id ;  

Reply

Marsh Posté le 02-09-2008 à 12:04:29    

Quand j'arrive sur la première page : index.php, je fais un test sur l'existance de $_SESSION['maVilleAMoiQueJai']. Si elle n'existe pas, alors je la créee et j'affect $GLOBALS["id"].
 
Mais si je reviens sur le même site avec une autre ville, $_SESSION['maVilleAMoiQueJai'] éxiste alors il ne la change pas... Je me retrouve donc avec les informations de l'autre ville en lieu et place de la nouvelle ville passé en argument

Reply

Marsh Posté le 02-09-2008 à 12:06:21    

alros il faut que tu fasse un tests sur l'existence ET sur le fait que la ville en parametre soit la meme que celle dans la session  
 
( maisje vois aps a quoi sert ton $_globals['id'] ) ?

Reply

Marsh Posté le 02-09-2008 à 12:12:33    

j'ai ça :  
 

Code :
  1. $ville = $_GET['agence'];
  2. $ida = @mysql_fetch_row(@mysql_query("select id_agence from `agence` where nom_agence_url like '" . str_replace(" ", "", $ville) . "';" ));
  3. if (!isset($_SESSION['id_agence']))
  4. {
  5. $_SESSION['id_agence'] = $ida[0];
  6. }
  7. $GLOBALS["id"] = $_SESSION['id_agence'];


 
ça fonctionne sauf deux choses :  
1. Je dois faire un reload de ma page pour que les paramètres passent
2. Si je change quoi que ce soit, genre le code qui suite, ça fonctionne plus :'(
 

Code :
  1. $ville = $_GET['agence'];
  2. $ida = @mysql_fetch_row(@mysql_query("select id_agence from `agence` where nom_agence_url like '" . str_replace(" ", "", $ville) . "';" ));
  3. if (!isset($_SESSION['id_agence']) || $_SESSION['id_agence'] != $ida[0])
  4. {
  5. $_SESSION['id_agence'] = $ida[0];
  6. }
  7. $GLOBALS["id"] = $_SESSION['id_agence'];

Reply

Marsh Posté le 02-09-2008 à 12:45:34    

xkamui a écrit :

j'ai ça :  
 

Code :
  1. $ville = $_GET['agence'];
  2. $ida = @mysql_fetch_row(@mysql_query("select id_agence from `agence` where nom_agence_url like '" . str_replace(" ", "", $ville) . "';" ));
  3. if (!isset($_SESSION['id_agence']))
  4. {
  5. $_SESSION['id_agence'] = $ida[0];
  6. }
  7. $GLOBALS["id"] = $_SESSION['id_agence'];


 
ça fonctionne sauf deux choses :  
1. Je dois faire un reload de ma page pour que les paramètres passent
2. Si je change quoi que ce soit, genre le code qui suite, ça fonctionne plus :'(
 

Code :
  1. $ville = $_GET['agence'];
  2. $ida = @mysql_fetch_row(@mysql_query("select id_agence from `agence` where nom_agence_url like '" . str_replace(" ", "", $ville) . "';" ));
  3. if (!isset($_SESSION['id_agence']) || $_SESSION['id_agence'] != $ida[0])
  4. {
  5. $_SESSION['id_agence'] = $ida[0];
  6. }
  7. $GLOBALS["id"] = $_SESSION['id_agence'];



 
1-Échappe tes données dépendantes du client avant de les placer dans tes requêtes avec mysql_real_escape_string
2-Pas besoin de rendre ta variable de session globale elle l'est déjà...
Utilise directement $_SESSION
 
Ce qui donne :

Code :
  1. <?php
  2. $ville  = mysql_real_escape_string($_GET['agence']);
  3. $sql    = "select id_agence from `agence` where nom_agence_url like '" . str_replace(" ", "", $ville) . "';";
  4. $result = mysql_query($sql);
  5. $ida    = mysql_fetch_row($result);
  6.  
  7. if (!isset($_SESSION['id_agence']))
  8. {
  9.     $_SESSION['id_agence'] = $ida[0];
  10. }
  11.  
  12. echo "Id => {$_SESSION['id_agence']}";
  13. ?>


Message édité par Profil supprimé le 02-09-2008 à 12:46:39
Reply

Marsh Posté le 02-09-2008 à 16:11:31    

Merci Luc@s, mais celà ne corrige pas ce que je dois faire.
 
Comme je l'ai dit plus haut, je me dois d'utiliser $GLOBALS["id"].
 
De plus, si je change de ville, le problème reste le même, il me garde la session en cours, avec l'id de la ville précédente.

Reply

Marsh Posté le 02-09-2008 à 16:13:18    

t'as qu'a adapter le code qu'il t'a donné. A priori, il te reste 2 choses à ajouter: le test d'égalité entre $_SESSION et $ida[0] d'une part, et l'affectation de GLOBALS['id']...


---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 02-09-2008 à 16:19:46    

bah, oui, c'est bien ce que j'ai fait, mais, comme plus haut, dès que je change un truc, ça fonctionne même plus pour la première ville.
 
J'ai bien ajouté un 'ou session != id en cours' ainsi qu'une affectation de la Globale id, mais rien de nouveau...
 
vraiment, je patauge...

Reply

Marsh Posté le 05-09-2008 à 18:48:29    

$GLOBALS est inutile si tu passes par des SESSION car $_SESSION est accessible partout (comme $GLOBALS).
Alors pourquoi as tu besoin de $GLOBALS ???

Reply

Marsh Posté le 05-09-2008 à 18:48:29   

Reply

Marsh Posté le 05-09-2008 à 19:56:18    

prennons le problème dans l'autre sens, alors.
 
Disons que j'ai $GLOBALS et que je veux que cette globale change dès que on change de ville.

Reply

Marsh Posté le 05-09-2008 à 19:57:53    

a chaque nouveau chargement de page $_globals est vidé [:proy]

Reply

Marsh Posté le 05-09-2008 à 20:11:59    

ok, je crois que je commence à discerner la différence entre $_SESSIONS et $_GLOBALS.
 
En application à mon soucis :  
Lorsque je suis sur la page index, j'y accède avec une variable $ville. De là, je récupère l'id correspondant en BDD, le stock dans $_GLOBALS["id"] et je m'en sers dans un fichier Flash.
Ce fichier Flash vient, automatiquement, faire un getLocation vers la page accueil.php, cependant, il n'envoi pas la variable $ville, donc, dans la page accueil, je peux pas récupérer l'id, et les données ne sont pas à jour.
 
J'avais donc pensé, pour ça les mettre dans une variable de session.
Maintenant, jai aussi essayé de mettre ça comme ça :  

Code :
  1. if (!isset($_SESSION['id_agence_' . $ida[0] . '']))
  2. {
  3.   $_SESSION['id_agence_' . $ida[0] . ''] = $ida[0];
  4. }


 
Mais ça ne fonctionne pas mieux, voir pas du tout... :'( :'( :'(

Reply

Marsh Posté le 05-09-2008 à 20:26:50    

deja , pourquoi tu las mets dans $_SESSION['id_agence_' . $ida[0] . ''
 
pourquoi ne pas mettre tout simplement qq chose comme ca
$_SESSION['idVille'] = $idVille;
$_SESSION['idAgence'] =$idAgence  
 
et ainsi de suite ?

Reply

Marsh Posté le 16-09-2008 à 11:44:27    

Re-Bonjour
 
Petite mise à jour de mon soucis :  
 
J'ai maintenant une frame, appellé sur mon site parent, genre : http://www.parent.com qui contient le code suivant :

Code :
  1. <HTML>
  2. <HEAD>
  3. <FRAMESET rows="100%" FRAMESPACING="0" FRAMEBORDER="0">
  4. <FRAME SRC="http://www.monsite.fr/index.php?agence=mon_agence" NAME="corps" FRAMEBORDER="0" SCROLLING="Auto" NORESIZE MARGINWIDTH="0" MARGINHEIGHT="0">
  5. </FRAMESET>
  6. <noframes>
  7. <BODY BGCOLOR="#FFFFFF" LEFTMARGIN="0" TOPMARGIN="0" MARGINWIDTH="0" MARGINHEIGHT="0">
  8. </BODY>
  9. </noframes>
  10. </HTML>

Maintenant, dans la page PHP, je fait un appel de session dans index.php, puis je redirige vers index2.php qui lui, va afficher les données correspondantes aux valeurs dans la variable de session.
 
Cependant, sous IE ça fonctionne que si on fait un F5, et pas toujours du premier coup.
sous Firefox pas de soucis, mais mon client utilise IE, donc faut que j'arrive à le faire fonctionner dessus.
 
Quelqu'un pourrait m'aider, je déséspère...  :cry:

Reply

Marsh Posté le 16-09-2008 à 11:48:15    

tu comprends maintenant pourquoi les frames sont abandonnées ?

Reply

Marsh Posté le 16-09-2008 à 11:50:46    

sans doute, mais c'est une contraint technique à laquelle je ne peux couper...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed