prob lors de l'affichage de variables de session

prob lors de l'affichage de variables de session - PHP - Programmation

Marsh Posté le 15-06-2004 à 11:35:25    

voila.. au moment de la connexion au site, je fais un :

Code :
  1. $sqltestmail = "SELECT * FROM clients WHERE email='$mail'";
  2. mysql_query($sqltestmail);
  3. $result1 = @MYSQL_QUERY($sqltestmail) ;
  4. $_SESSION['data']=mysql_fetch_array($result1);


 
ensuite d'etapes en etapes j'utilise ou aliment ma variable de session $_SESSION['data']... simplement à un moment (etape 4) je fais ça :
 
 

Code :
  1. <?php
  2. $_SESSION['data']['raison_sociale1']=$_SESSION['data']['raison_sociale'];
  3. $_SESSION['data']['nom1']=$_SESSION['data']['nom'];
  4. $_SESSION['data']['secteur1']=$_SESSION['data']['cp'];
  5. $_SESSION['data']['prenom1']=$_SESSION['data']['prenom'];
  6. $_SESSION['data']['adresse1']=$_SESSION['data']['adresse'];
  7. $_SESSION['data']['telephone1']=$_SESSION['data']['telephone']; ?>
  8. <input name="raison_sociale1" type="text" id="raison_sociale1" value="<? echo  $_SESSION['data']['raison_sociale1'];  ?>">
  9. <input name="nom1" type="text" id="nom1" value="<? echo  $_SESSION['data']['nom1'];  ?>">
  10. <input name="prenom1" type="text" id="prenom1" value="<? echo  $_SESSION['data']['prenom1']; ?>">
  11. <input name="adresse1" type="text" id="adresse1" value="<? echo  $_SESSION['data']['adresse1'];  ?>">
  12. ...etc etc etc


 
mais ce que je comprends pas.. c qu'il faut que je reloade la page pour que mes variables apparaissent dans les champs ! et faut que je submit deux fois pour passer à la page suivante...  
 
c quoi qui s'passe ?


Message édité par freed102 le 15-06-2004 à 11:36:23
Reply

Marsh Posté le 15-06-2004 à 11:35:25   

Reply

Marsh Posté le 15-06-2004 à 12:02:35    

freed102 a écrit :

voila.. au moment de la connexion au site, je fais un :

Code :
  1. $sqltestmail = "SELECT * FROM clients WHERE email='$mail'";
  2. mysql_query($sqltestmail);
  3. $result1 = @MYSQL_QUERY($sqltestmail) ;
  4. $_SESSION['data']=mysql_fetch_array($result1);


 
ensuite d'etapes en etapes j'utilise ou aliment ma variable de session $_SESSION['data']... simplement à un moment (etape 4) je fais ça :
 
 

Code :
  1. <?php
  2. $_SESSION['data']['raison_sociale1']=$_SESSION['data']['raison_sociale'];
  3. $_SESSION['data']['nom1']=$_SESSION['data']['nom'];
  4. $_SESSION['data']['secteur1']=$_SESSION['data']['cp'];
  5. $_SESSION['data']['prenom1']=$_SESSION['data']['prenom'];
  6. $_SESSION['data']['adresse1']=$_SESSION['data']['adresse'];
  7. $_SESSION['data']['telephone1']=$_SESSION['data']['telephone']; ?>
  8. <input name="raison_sociale1" type="text" id="raison_sociale1" value="<? echo  $_SESSION['data']['raison_sociale1'];  ?>">
  9. <input name="nom1" type="text" id="nom1" value="<? echo  $_SESSION['data']['nom1'];  ?>">
  10. <input name="prenom1" type="text" id="prenom1" value="<? echo  $_SESSION['data']['prenom1']; ?>">
  11. <input name="adresse1" type="text" id="adresse1" value="<? echo  $_SESSION['data']['adresse1'];  ?>">
  12. ...etc etc etc


 
mais ce que je comprends pas.. c qu'il faut que je reloade la page pour que mes variables apparaissent dans les champs ! et faut que je submit deux fois pour passer à la page suivante...  
 
c quoi qui s'passe ?


Tu m'anipule tes variable de session comme si c'étais des variables normal  :heink:  
$sqltestmail = "SELECT * FROM clients WHERE email='$mail'";  
  mysql_query($sqltestmail);  
  $result1 = @MYSQL_QUERY($sqltestmail) ;  
  $_SESSION['data']=mysql_fetch_array($result1);[/
 
 
 
$_SESSION['data']['raison_sociale1']=$_SESSION['data']['raison_sociale'];  
$_SESSION['data']['nom1']=$_SESSION['data']['nom'];
$_SESSION['data']['secteur1']=$_SESSION['data']['cp'];  
$_SESSION['data']['prenom1']=$_SESSION['data']['prenom'];
$_SESSION['data']['adresse1']=$_SESSION['data']['adresse'];  
$_SESSION['data']['telephone1']=$_SESSION['data']['telephone']; ?>  
 
 
 
 dans tous ce charabia cela m'étonnerais pas que ton code ne fonctionne pas. Je sais que php est souple mais cela t'empeche pas d'etre un peut plus rigoureux et de ne pas faire n'importe quoi. Je sais pas si le probleme vien de cela mais je te conseil d'utiliser des variables prévu pour.


Message édité par Berceker United le 15-06-2004 à 12:07:49
Reply

Marsh Posté le 15-06-2004 à 12:12:15    

Berceker United a écrit :

Tu m'anipule tes variable de session comme si c'étais des variables normal  :heink:  
$sqltestmail = "SELECT * FROM clients WHERE email='$mail'";  
  mysql_query($sqltestmail);  
  $result1 = @MYSQL_QUERY($sqltestmail) ;  
  $_SESSION['data']=mysql_fetch_array($result1);[/
 
 
 
  $_SESSION['data']['raison_sociale1']=$_SESSION['data']['raison_sociale'];  
  $_SESSION['data']['nom1']=$_SESSION['data']['nom'];  $_SESSION['data']['secteur1']=$_SESSION['data']['cp'];  
  $_SESSION['data']['prenom1']=$_SESSION['data']['prenom'];
  $_SESSION['data']['adresse1']=$_SESSION['data']['adresse'];  
$_SESSION['data']['telephone1']=$_SESSION['data']['telephone']; ?>  
 
 
 
 dans tous ce charabia cela m'étonnerais pas que ton code ne fonctionne pas.


 
Bah ouai mais dans ce cas là... vous feriez comment ??? là c comme si j'avais
 
$data['nom1']=$data['nom'];
 
(dans le cas ou je veux que la valeur de 'nom1' soit la même que 'nom' ('nom1' qui pourra etre modifié par l'utilisateur si besoin est, mais qui par defaut doit etre egale à 'nom')
 
... là je fais un tableau avec une variable de session... c pas possible peut etre ?

Reply

Marsh Posté le 15-06-2004 à 12:35:31    

voici ce qui pourrais t'arranger [:papy]

Code :
  1. //Récupération des données en base
  2. $arrData = array();
  3. $result = mysql_query("SELECT * FROM clients WHERE email='$mail'" );
  4. $arrData = mysql_fetch_array($result);
  5. //place directement le tableau de resultat dans la session
  6. $_SESSION['data'] = $arrData;
  7. print_r($_SESSION); //ceci te permet de visualiser la structure de ta session donc la maniere sont rangé tes donnée.


plié emballé.


Message édité par Berceker United le 15-06-2004 à 12:39:02
Reply

Marsh Posté le 15-06-2004 à 12:39:32    

Berceker United a écrit :

Code :
  1. //Récupération des données en base
  2. $arrData = array();
  3. $result = mysql_query("SELECT * FROM clients WHERE email='$mail'" );
  4. $arrData = mysql_fetch_array($result);
  5. //place directement le tableau de resultat dans la session
  6. $_SESSION['data'] = $arrData;
  7. print_r($_SESSION); //ceci te permet de visualiser la structure de ta session donc la maniere sont rangé tes donnée.


plié emballé.


 
ok merci.. Mais là si je veux rajouter des champs à mon tableau qui ne sont pas dans la base sql... je fais comment ?

Reply

Marsh Posté le 15-06-2004 à 18:35:00    

freed102 a écrit :

ok merci.. Mais là si je veux rajouter des champs à mon tableau qui ne sont pas dans la base sql... je fais comment ?


Pour faire propement les choses, tu récupère les données de ta session.
$array = array();
$array = $_SESSION['data'];
 
  ... tu travails sur ton tableau (il faut savoir manipuler les données dans un tableau).
Ne concidère pas $_SESSION comme étant un tableau même si ça y ressemble ![:papy]  
Tu remet ton tableau dans ta session.
$_SESSION['data'] = $array;


Message édité par Berceker United le 15-06-2004 à 18:36:54
Reply

Marsh Posté le 15-06-2004 à 18:48:44    

genre si je fais :
 
$arrData=Array(nom1=>"$_SESSION['data']['prenom'],nom2=>$_SESSION['data']['prenom']);
$_SESSION['data']=$arrData;
 
... c pas un peu tordu ?

Reply

Marsh Posté le 15-06-2004 à 19:02:17    

freed102 a écrit :

genre si je fais :
 
$arrData=Array(nom1=>"$_SESSION['data']['prenom'],nom2=>$_SESSION['data']['prenom']);
$_SESSION['data']=$arrData;
 
... c pas un peu tordu ?


Non mais la je comprend pas trop ce que tu veux faire. Tu veux rajouter une valeur à ta session ou tu veux rajouter un nouveau tableau dans une variable de type tableau et que tu veux la mettre en session.

Reply

Marsh Posté le 15-06-2004 à 19:03:06    

j'ai fait un essai...

Code :
  1. <?php
  2. $arr['etape1']="n°1";
  3. $arr['etape2']="n°2";
  4. $arr['etape3']="n°3";
  5. $arr['etape4']="n°4";
  6. $_SESSION['data']=$arr;
  7. $_SESSION['data']['etape5']="n°5";
  8. $arr=$_SESSION['data'];
  9. print_r($_SESSION['data']);
  10. echo "<br />";
  11. print_r($arr);
  12. ?>


pourtant ça marche tres bien comme ça !!.... pour moi ça me parait plus logique... mais dans mon site ça deconne... car il y a un decalage avec mes etapes...

Reply

Marsh Posté le 15-06-2004 à 19:04:54    

Berceker United a écrit :

Non mais la je comprend pas trop ce que tu veux faire. Tu veux rajouter une valeur à ta session ou tu veux rajouter un nouveau tableau dans une variable de type tableau et que tu veux la mettre en session.


 
je veux juste rajouter des valeur à mon tableau dans ma variable de session directement.. et l'afficher...
 
genre dans un champ de formulaire je fais <? echo $_SESSION['data']['nom']; ?>

Reply

Marsh Posté le 15-06-2004 à 19:04:54   

Reply

Marsh Posté le 15-06-2004 à 19:07:42    

C'est Normal. Je crois qu'il faut que tu test ta session après rafraichissement de ta page parce que sur le coup elle n'est pas effective. Comme je l'ai dit, il ne faut pas manipuler les session comme une variable ordinaire. Meme si ça fonctionne de faire ceci $_SESSION['data']['xxx'] c'est pas terrible !...


Message édité par Berceker United le 15-06-2004 à 19:09:04
Reply

Marsh Posté le 15-06-2004 à 19:16:44    

Berceker United a écrit :

C'est Normal. Je crois qu'il faut que tu test ta session après rafraichissement de ta page parce que sur le coup elle n'est pas effective. Comme je l'ai dit, il ne faut pas manipuler les session comme une variable ordinaire. Meme si ça fonctionne de faire ceci $_SESSION['data']['xxx'] c'est pas terrible !...


 
ça y est  !! lol j'ai capté mon erreur... en fait à la connexion... je memorise bien mon tableau... mais la page suivante fait un "session_destroy' ... alors forcement.. ça risque pas de marcher ! ;)

Reply

Marsh Posté le 15-06-2004 à 19:19:27    

j'ai fait comme ça.. ça me parait plus propre :  

Code :
  1. $result = mysql_query("SELECT * FROM clients WHERE email='$mail'" );
  2.      $data = mysql_fetch_array($result);
  3.  $_SESSION['data']['id']= $data['id'];
  4.  $_SESSION['data']['raison_sociale'] = $data['raison_sociale'] ;
  5.  $_SESSION['data']['nom'] = $data['nom'] ;
  6.  $_SESSION['data']['prenom'] = $data['prenom'] ;
  7.  $_SESSION['data']['fonction'] = $data['fonction'] ;
  8.  $_SESSION['data']['adresse'] = $data['adresse'] ;
  9.  $_SESSION['data']['cp'] = $data['cp'] ;
  10.  $_SESSION['data']['ville'] = $data['ville'] ;
  11.  $_SESSION['data']['telephone'] = $data['telephone'] ;
  12.  $_SESSION['data']['fax'] = $data['fax'] ;
  13.  $_SESSION['data']['email'] = $data['email'] ;
  14.  $_SESSION['data']['url'] = $data['url'] ;
  15.  $_SESSION['data']['datereg'] = $data['date_reg'] ;
  16.  $_SESSION['data']['ip'] = $data['ip'] ;
  17.  $_SESSION['data']['siret'] = $data['siret'] ;

Reply

Marsh Posté le 15-06-2004 à 19:24:21    

freed102 a écrit :

j'ai fait comme ça.. ça me parait plus propre :  

Code :
  1. $result = mysql_query("SELECT * FROM clients WHERE email='$mail'" );
  2.      $data = mysql_fetch_array($result);
  3.  $_SESSION['data']['id']= $data['id'];
  4.  $_SESSION['data']['raison_sociale'] = $data['raison_sociale'] ;
  5.  $_SESSION['data']['nom'] = $data['nom'] ;
  6.  $_SESSION['data']['prenom'] = $data['prenom'] ;
  7.  $_SESSION['data']['fonction'] = $data['fonction'] ;
  8.  $_SESSION['data']['adresse'] = $data['adresse'] ;
  9.  $_SESSION['data']['cp'] = $data['cp'] ;
  10.  $_SESSION['data']['ville'] = $data['ville'] ;
  11.  $_SESSION['data']['telephone'] = $data['telephone'] ;
  12.  $_SESSION['data']['fax'] = $data['fax'] ;
  13.  $_SESSION['data']['email'] = $data['email'] ;
  14.  $_SESSION['data']['url'] = $data['url'] ;
  15.  $_SESSION['data']['datereg'] = $data['date_reg'] ;
  16.  $_SESSION['data']['ip'] = $data['ip'] ;
  17.  $_SESSION['data']['siret'] = $data['siret'] ;




oui mais ça sert a rien !  
ce que tu fais c'est la meme chose que ceci :
 

Code :
  1. $result = mysql_query("SELECT * FROM clients WHERE email='".$mail."'" ); 
  2. $data = mysql_fetch_array($result);
  3. $_SESSION['data'] = $data;


 
Effectivement le destroy va te faire tourner longtemps en bourrique


Message édité par Berceker United le 15-06-2004 à 19:25:34
Reply

Marsh Posté le 16-06-2004 à 11:04:57    

berceker united a écrit :

oui mais ça sert a rien !  
ce que tu fais c'est la meme chose que ceci :
 

Code :
  1. $result = mysql_query("SELECT * FROM clients WHERE email='".$mail."'" ); 
  2. $data = mysql_fetch_array($result);
  3. $_SESSION['data'] = $data;


 
Effectivement le destroy va te faire tourner longtemps en bourrique


 
Oui mais si je fait comme tu dis... ça me perturbe un peu parce que quand je fais print_r($_SESSION['data'])
il me reponds ça :
 

Array ( [0] => DUPJA97bca87 [id] => DUPJA97bca87 [1] => Plombs SA [raison_sociale] => Plombs SA [2] => 123456789 [siret] => 123456789 [3] => Dupond [nom] => Dupond [4] => Jacques [prenom] => Jacques [5] => Plombier [fonction] => Plombier [6] => 33, rue des beaux tuyaux [adresse] => 33, rue des beaux tuyaux [7] => 78400 [cp] => 78400 [8] => Plombcity [ville] => Plombcity [9] => 0123456790 [telephone] => 0123456790 [10] => 0123456710 [fax] => 0123456710 [11] => xxx@xxx.com [email] => xxx@xxx.com [12] => xxx [password] => xxx [13] => http://www.clonecopy.net [url] => http://www.clonecopy.net [14] => 11/02/2004 [date_reg] => 11/02/2004 [15] => 217.128.120.143 [ip] => 217.128.120.143 )


 
hors avec ma methode ça me parait plus rangé :
 

Array ( [id] => DUPJA97bca87 [raison_sociale] => Plombs SA [nom] => Dupond [prenom] => Jacques [fonction] => Plombier [adresse] => 33, rue des beaux tuyaux [cp] => 78400 [ville] => Plombcity [telephone] => 0123456790 [fax] => 0123456710 [email] => xxx@xxx.com [url] => http://www.clonecopy.net [date_reg] => 11/02/2004 [ip] => 217.128.120.143 [siret] => 123456789 )


Message édité par freed102 le 16-06-2004 à 11:09:50
Reply

Marsh Posté le 16-06-2004 à 12:10:58    

en faite il te fais une doublon il te place l'index et le nom de la dimension

Reply

Marsh Posté le 16-06-2004 à 12:41:42    

alors je comprends plus rien !
 
je vais resumer mon fichier...
 
index.php

Code :
  1. <?php
  2. session_start();
  3. if (!isset($_SESSION['data']['donnees']))
  4. {
  5. mysql_select_db("$bddname", $connect);
  6. $result = mysql_query("SELECT * FROM clients WHERE id='$_SESSION[id1]'" );
  7. $data = mysql_fetch_array($result);
  8. $_SESSION['data']['id']= $data['id'];
  9. $_SESSION['data']['raison_sociale'] = $data['raison_sociale'] ;
  10. $_SESSION['data']['nom'] = $data['nom'] ;
  11. [...]
  12. }
  13. print_r($_SESSION['data']);
  14. include('etape4.php');
  15. ?>


 
etape4.php
 

Code :
  1. <?php
  2. print_r($_SESSION['data']);
  3. ?>


 
 
pour le print_r de index.php il me reponds :

Array ( [0] => DUPJA97bca87 [id] => DUPJA97bca87 [1] => Plombs SA [raison_sociale] => Plombs SA [2] => 123456789 [siret] => 123456789 [3] => Dupond [nom] => Dupond [4] => Jacques [prenom] => Jacques [5] => Plombier [fonction] => Plombier [6] => 33, rue des beaux tuyaux [adresse] => 33, rue des beaux tuyaux [7] => 78400 [cp] => 78400 [8] => Plombcity [ville] => Plombcity [9] => 0123456790 [telephone] => 0123456790 [10] => 0123456710 [fax] => 0123456710 [11] => xxx@xxx.com [email] => xxx@xxx.com [12] => xxx [password] => xxx [13] => http://www.clonecopy.net [url] => http://www.clonecopy.net [14] => 11/02/2004 [date_reg] => 11/02/2004 [15] => 217.128.120.143 [ip] => 217.128.120.143 [raison_sociale1] => Plombs SA [nom1] => Dupond [prenom1] => Jacques [fonction1] => Plombier [adresse1] => 33, rue des beaux tuyaux [cp1] => 78400 [ville1] => Plombcity [telephone1] => 0123456790 [raison_sociale2] => Plombs SA [nom2] => Dupond [prenom2] => Jacques [fonction2] => Plombier [adresse2] => 33, rue des beaux tuyaux [cp2] => 78400 [ville2] => Plombcity [telephone2] => 0123456790 [donnees] => ok )


 
pour le second (dans l'include) il me reponds :

Array ( [0] => DUPJA97bca87 [id] => DUPJA97bca87 [1] => Plombs SA [raison_sociale] => Plombs SA [2] => 123456789 [siret] => 123456789 [3] => Dupond [nom] => Dupond [4] => Jacques [prenom] => Jacques [5] => Plombier [fonction] => Plombier [6] => 33, rue des beaux tuyaux [adresse] => 33, rue des beaux tuyaux [7] => 78400 [cp] => 78400 [8] => Plombcity [ville] => Plombcity [9] => 0123456790 [telephone] => 0123456790 [10] => 0123456710 [fax] => 0123456710 [11] => xxx@xxx.com [email] => xxx@xxx.com [12] => xxx [password] => xxx [13] => http://www.clonecopy.net [url] => http://www.clonecopy.net [14] => 11/02/2004 [date_reg] => 11/02/2004 [15] => 217.128.120.143 [ip] => 217.128.120.143 )


 
... forcement.. il y a de la perte !! mais comment est-ce possible ???


Message édité par freed102 le 16-06-2004 à 12:42:14
Reply

Marsh Posté le 16-06-2004 à 12:53:11    

.. en fait je crois que j'ai un probleme avec les index dans les tableaux...
 
comment eviter les [0] [1] [2] ???
 
là le conflit c'est qu'il m'en mets pas partout !


Message édité par freed102 le 16-06-2004 à 12:59:59
Reply

Marsh Posté le 16-06-2004 à 13:21:51    

il te permet de récuperer tes éléments de deux maniere soit avec l'index de ta dimension soit par le nom de la dimension. Mais ton tableau reste quand même bien formaté.

Reply

Marsh Posté le 16-06-2004 à 15:01:57    

berceker united a écrit :

il te permet de récuperer tes éléments de deux maniere soit avec l'index de ta dimension soit par le nom de la dimension. Mais ton tableau reste quand même bien formaté.


 
now c bon j'ai trouvé mon erreur.. chaque fois que je faisais une requete SQL je mettais $data=mysql_fetch_array... forcement entre $_SESSION['data'] et $data... ça deconne !
 
maintenant j'en ai donc plus qu'un seul : $_SESSION['data'] ... et je peux y ajouter des elements quand je veux like this :  
 
$_SESSION['data']['toto']="tata !";
 
... et un print_r($_SESSION['data']) ressemble à ça :
 

Array ( [id] => DUPJA97bca87 [raison_sociale] => Plombs SA [nom] => Dupond [prenom] => Jacques [fonction] => Plombier [adresse] => 33, rue des beaux tuyaux [cp] => 78400 [ville] => Plombcity [telephone] => 0123456790 [raison_sociale1] => Plombs SA [nom1] => Dupond [prenom1] => Jacques [fonction1] => Plombier [adresse1] => 33, rue des beaux tuyaux [cp1] => 78400 [ville1] => Plombcity [telephone1] => 0123456790 [raison_sociale2] => Plombs SA [nom2] => Dupond [prenom2] => Jacques [fonction2] => Plombier [adresse2] => 33, rue des beaux tuyaux [cp2] => 78400 [ville2] => Plombcity [telephone2] => 0123456790 [fax] => 0123456710 [email] => xxx@xxx.com [url] => http://www.clonecopy.net [date_reg] => 11/02/2004 [ip] => 217.128.120.143 [siret] => 123456789 [donnees] => ok


 
et là tout va bien ! :)

Reply

Marsh Posté le 16-06-2004 à 15:18:29    

cool raoul :)
Autre point ! je sais pas ton programme total mais si tu as beaucoup d'utilisateur ayant chacun une session pense a la vider lorsqu'ils n'ont plus besoin parce que ça prendre de la place et ralenti les performances du serveur. Php ne gère pas comme java des session pour l'ensemble de utilisateur.
un utilisateur = une session = un fichier = un process

Reply

Marsh Posté le 16-06-2004 à 15:56:21    

ya un bouton "deconnexion" ... qui fait un "session_destroy" .. mais bon c clair c pas suffisant !
je mettrais un "session_unset" à la fin d'un enregistrement
mais là je peux pas faire mieux après.. si un utilisateur abandonne en cours de route.. je peux pas detruire une variable de session (s'il ferme le navigateur).. ou alors avec un javascript mais là c tordu !

Reply

Marsh Posté le 16-06-2004 à 16:01:38    

freed102 a écrit :

ya un bouton "deconnexion" ... qui fait un "session_destroy" .. mais bon c clair c pas suffisant !
je mettrais un "session_unset" à la fin d'un enregistrement
mais là je peux pas faire mieux après.. si un utilisateur abandonne en cours de route.. je peux pas detruire une variable de session (s'il ferme le navigateur).. ou alors avec un javascript mais là c tordu !


Il le ferra tous seul si le client ferme le navigateur.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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