[RESOLU]stocker des valeurs en tableau de session ...?

stocker des valeurs en tableau de session ...? [RESOLU] - PHP - Programmation

Marsh Posté le 25-08-2005 à 11:17:20    

bonjour,
 
j'ai posé une question hier incompréhensible, depuis j'ai testé pleins de trucs, et j'espere être plus claire aujourd'hui.
je voudrai envoyer des valeurs provenant d'un formulaire et les stocker en session sous forme d'un tableau.
 
dans mon formulaire , je peux selectionner une donnée, ex : nom et rentrer ses parametres, x, y, a, ensuite stocker ces parametres en session grace à une page validation.php. Puis retourner à mon formulaire, choisir une 2eme donnee ex : prenom et ses parametres, et les stocker dans une variable de session.
 
le tableau de donnees que je veux obtenir est sous cette forme :
$_SESSION[nom][x]
$_SESSION[nom][y]
$_SESSION[nom][a]
 
$_SESSION[prenom][x]
$_SESSION[prenom][y]
$_SESSION[prenom][a]
...
 
nom, prenom .. correspondant à mon <select name=champs>
 
voici un bout du formulaire:
 

Code :
  1. $req3 = "SELECT id_champ, n_champ FROM champs";
  2. $res3 = mysql_query($req3) or print($req3);
  3.    print("<select name='champs'>" );
  4.    
  5.     while($champs = mysql_fetch_array($res3)) {
  6.     print("<option value='".$champs['id_champ']."'" );
  7.     print(">".$champs['n_champ']." </option>" );
  8.     }
  9.     print("</select> " );
  10.   
  11. print(" x<input type='text' name='x' size='10'>" );
  12. print("y <input type='text' name='y' size='10'>" );
  13. print("a <input type='text' name='angle' size='10'>" );
  14. ...


 
ma page validation :
 

Code :
  1. $id_champ = $_POST['champs'];
  2. if($id_champ != $id){
  3. $_SESSION[$id_champ]['x'] = $_POST['x'];
  4. $_SESSION[$id_champ]['y'] = $_POST['y'];
  5. $_SESSION[$id_champ]['a'] = $_POST['angle'];
  6. $id= $id_champ;
  7. }
  8. print($_SESSION[$id_champ]['x']." x <br>" );
  9. print($id_champ." id_champ <br>" );
  10. print($id." id <br>" );
  11. ...
  12. header(location:formulaire.php


 
pour l'instant, quand je rentre les donnees une 2eme fois, il remplace l'id_champ que j'ai stocke la 1ere fois. Or, ce que je voudrai c'est qu'il me rajoute le nouveau champ selectionne avec ses coordonnees.
J'ai voulu mettre une variable $id pour qu'il vérifie à chaque fois si le nouveau id_champ est different de l'ancien, mais ça marche pas.
 
???
 
merci


Message édité par miriam le 25-08-2005 à 17:12:39
Reply

Marsh Posté le 25-08-2005 à 11:17:20   

Reply

Marsh Posté le 25-08-2005 à 11:51:27    

Eh bien !! a première vue, il faut que tu récupère la longueur de ton tableau $_SESSION avec tableau.length() (il me semble  :heink: ). Et après tu fais tout simplement :
$_SESSION[tableau.length]['x'] = $_POST['x'];  
 
Ca donne
 
$tableau = $_SESSION['resultat'];  
//on repupere l'ancien tableau qui est stocké dans resultat.
$tableau[$tableau.length][nom] = $_POST['x'];  
$tableau[$tableau.length][prenom] = $_POST['x'];  
// on ajoute les valeurs.
$_SESSION['resultat'] = $tableau;
//on écrase le nouveau tableau sur l'ancien
 
tu aura donc une variable de session nommée 'resultat' que tu lira avec un foreach quand tu le souhaitera.


Message édité par ddesre le 25-08-2005 à 11:53:53
Reply

Marsh Posté le 25-08-2005 à 11:54:11    

miriam a écrit :


pour l'instant, quand je rentre les donnees une 2eme fois, il remplace l'id_champ que j'ai stocke la 1ere fois.


 
Même quand tu sélectionnes un autre "champ" dans la liste donc ? Ton truc a l'air d'être correct dans l'ensemble, je comprends pas bien ce qui cloche ni l'intérêt du test que tu fais.
 
Essaie de nous donner un exemple concret de ce que tu fais et de ce qui ne va pas.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-08-2005 à 11:54:52    

miriam a écrit :

J'ai voulu mettre une variable $id pour qu'il vérifie à chaque fois si le nouveau id_champ est different de l'ancien, mais ça marche pas.


ta variable $id n'est pas conservée entre les pages, donc...

Reply

Marsh Posté le 25-08-2005 à 11:56:38    

ddesre a écrit :

Eh bien !! a première vue, il faut que tu récupère la longueur de ton tableau $_SESSION avec tableau.length() (il me semble  :heink: ). Et après tu fais tout simplement :
$_SESSION[tableau.length]['x'] = $_POST['x'];


heu un peu à coté de la plaque je crois  ;)  

Reply

Marsh Posté le 25-08-2005 à 12:27:39    

Code :
  1. <?php
  2. session_start();
  3. include "connect.php";
  4. print_r($_SESSION);
  5. $action = 'ajouter';
  6. $etat = "";
  7. $req1 = "SELECT type, id_imp FROM imprimes";
  8. $res1 = mysql_query($req1) or print($req1);
  9. $req2 = "SELECT id_categ, categ FROM categories";
  10. $res2 = mysql_query($req2) or print($req2);
  11. $req3 = "SELECT id_champ, n_champ FROM champs";
  12. $res3 = mysql_query($req3) or print($req3);
  13. ?>
  14. <html>
  15. <head>
  16. <title>----------</title>
  17. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  18. </head>
  19. <body bgcolor="#FFFFFF">
  20. <form method="post" action="essai.php" enctype="multipart/form-data" >
  21.           <?
  22.     print("Imprim&eacute; :<br><select ".$etat." name='imprime'>" );
  23.    
  24.     while($imprimes = mysql_fetch_array($res1)) {
  25.     print("<option value='".$imprimes['id_imp']."'" );
  26.     if($action != 'ajouter')
  27.     {if($imprimes['id_imp'] == $donneesmodele['id_imp']){print("selected" );}
  28.     }
  29.     print(">".$imprimes['type']." </option>" );
  30.     }
  31.     print("</select><br>" );
  32.        
  33.      print("<p> Choisissez le mod&egrave;le :<br>" );
  34.  
  35.   print("<select ".$etat." name='categorie'>" );
  36.   while($categorie=mysql_fetch_array($res2)) {
  37.    print("<option value='".$categorie['id_categ']."'" );
  38.   if($action != 'ajouter')
  39.      {if($categorie['id_categ'] == $donneesmodele['id_categ']) print("selected" );
  40.    }
  41.     print(">".$categorie['categ']." </option>" );
  42.     }
  43.     print("</select> </p>" );
  44.    print("<select ".$etat." name='champs'>" );
  45.    
  46.     while($champs = mysql_fetch_array($res3)) {
  47.     print("<option value='".$champs['id_champ']."'" );
  48.     if($action != 'ajouter')
  49.     {if($champs['id_champ'] == $donneesmodele['id_champ']){print("selected" );}
  50.     }
  51.     print(">".$champs['n_champ']." </option>" );
  52.     }
  53.     print("</select> x " );
  54.   
  55. print("<input type='text' name='x' size='10'>" );
  56. print("y <input type='text' name='y' size='10'>" );
  57. print("a <input type='text' name='angle' size='10'>" );
  58. print("police <input type='text' name='police' size='10'>" );
  59. print("taille <input type='text' name='taille' size='10'>" );
  60. print("couleur <input type='text' name='couleur' size='10'>" );
  61.   ?><br>
  62.     <input type="submit" value="envoyer">
  63. </form>
  64. </body>
  65. </html>


 
la page qui valide :

Code :
  1. <?php
  2. session_start();
  3. include("connect.php" );
  4. $id_champ = $_POST['champs'];
  5. $_SESSION[$id_champ]['x'] = $_POST['x'];
  6. $_SESSION[$id_champ]['y'] = $_POST['y'];
  7. $_SESSION[$id_champ]['angle'] = $_POST['angle'];
  8. $_SESSION['id_categ'] = $_POST['categorie'];
  9. $_SESSION['id_imp'] = $_POST['imprime'];
  10. print_r($_SESSION);
  11. ?>


Message édité par miriam le 25-08-2005 à 16:02:43
Reply

Marsh Posté le 25-08-2005 à 12:34:31    

Comment tu veux qu'il t'affiche 6 lignes (ou 4, sans le print sur l'id) quand tu balances que 3 (ou 2) print ?
 
Je comprends pas trop, là.
 
Fait un print_r($_SESSION), t'auras sûrement les idées plus claires.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-08-2005 à 14:01:54    

Comment tu veux qu'il t'affiche 6 lignes (ou 4, sans le print sur l'id) quand tu balances que 3 (ou 2) print ?
 
oui, je me rendais bien compte qu'il ne pouvait pas, mais en fait je ne sais pas comment faire pour les afficher tous...
 
Fait un print_r($_SESSION), t'auras sûrement les idées plus claires.
 
lors de mon 1er enregistrement, il me met ça
Array ( [1] => Array ( [x] => 10 [y] => 10 [angle] => 10 ) )
 
je retourne a ma page form, je rentre les donnees pour le 2eme, et j'ai ça
 
Array ( [2] => Array ( [x] => 20 [y] => 20 [angle] => 20 ) )
 
est ce que ça veut dire qu'il a remplacé les 1eres données qui etaient en session ?

Reply

Marsh Posté le 25-08-2005 à 14:05:38    

apparemment ta session ne fonctionne pas,
tu as bien mis un session_start au début de tes scripts ?

Reply

Marsh Posté le 25-08-2005 à 14:08:37    

Probablement ça, ouai.


Message édité par sielfried le 25-08-2005 à 14:08:48

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-08-2005 à 14:08:37   

Reply

Marsh Posté le 25-08-2005 à 15:30:51    

ben oui, j'ai mis session_start() dans les 2 fichiers.
quand je fais un print_r($_SESSION) dans le formulaire , il m'affiche array() et l'autre toujours pareil

Reply

Marsh Posté le 25-08-2005 à 15:51:08    

Fait voir le code complet des fichiers (entre balises [cpp], c'est mieux).


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-08-2005 à 16:05:10    

le voilà


Message édité par miriam le 25-08-2005 à 16:08:38
Reply

Marsh Posté le 25-08-2005 à 16:07:50    

Code :
  1. <?php 
  2. session_start();
  3. include "connect.php";
  4. print_r($_SESSION);
  5. $action = 'ajouter';
  6. $etat = "";
  7. $req1 = "SELECT type, id_imp FROM imprimes";
  8. $res1 = mysql_query($req1) or print($req1); 
  9. $req2 = "SELECT id_categ, categ FROM categories";
  10. $res2 = mysql_query($req2) or print($req2);
  11. $req3 = "SELECT id_champ, n_champ FROM champs";
  12. $res3 = mysql_query($req3) or print($req3); 
  13. ?>
  14. <html>
  15. <head>
  16. <title>----------</title>
  17. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  18. </head>
  19. <body bgcolor="#FFFFFF">
  20. <form method="post" action="essai.php" enctype="multipart/form-data" >
  21.           <? 
  22.               print("Imprim&eacute; :<br><select ".$etat." name='imprime'>" );
  23.              
  24.               while($imprimes = mysql_fetch_array($res1)) {
  25.               print("<option value='".$imprimes['id_imp']."'" );
  26.               if($action != 'ajouter')
  27.                  {if($imprimes['id_imp'] == $donneesmodele['id_imp']){print("selected" );}
  28.                     }
  29.               print(">".$imprimes['type']." </option>" );
  30.               }
  31.               print("</select><br>" );
  32.          
  33.        
  34.               print("<p> Choisissez le mod&egrave;le :<br>" );
  35.    
  36.             print("<select ".$etat." name='categorie'>" );
  37.             while($categorie=mysql_fetch_array($res2)) {
  38.              print("<option value='".$categorie['id_categ']."'" );
  39.             if($action != 'ajouter')
  40.                   {if($categorie['id_categ'] == $donneesmodele['id_categ']) print("selected" );
  41.                 }
  42.               print(">".$categorie['categ']." </option>" );
  43.               }
  44.               print("</select> </p>" );
  45.            
  46.              print("<select ".$etat." name='champs'>" );
  47.              
  48.               while($champs = mysql_fetch_array($res3)) {
  49.               print("<option value='".$champs['id_champ']."'" );
  50.               if($action != 'ajouter')
  51.                  {if($champs['id_champ'] == $donneesmodele['id_champ']){print("selected" );}
  52.                     }
  53.               print(">".$champs['n_champ']." </option>" );
  54.               }
  55.               print("</select> x " );
  56.          
  57. print("<input type='text' name='x' size='10'>" );
  58. print("y <input type='text' name='y' size='10'>" );
  59. print("a <input type='text' name='angle' size='10'>" );
  60. print("police <input type='text' name='police' size='10'>" );
  61. print("taille <input type='text' name='taille' size='10'>" );
  62. print("couleur <input type='text' name='couleur' size='10'>" );
  63.          ?><br>
  64.     <input type="submit" value="envoyer">
  65. </form>
  66. </body>
  67. </html>


 
la page qui valide :  

Code :
  1. <?php 
  2. session_start();
  3. include("connect.php" );
  4. $id_champ = $_POST['champs'];
  5. $_SESSION[$id_champ]['x'] = $_POST['x'];
  6. $_SESSION[$id_champ]['y'] = $_POST['y'];
  7. $_SESSION[$id_champ]['angle'] = $_POST['angle'];
  8. $_SESSION['id_categ'] = $_POST['categorie'];
  9. $_SESSION['id_imp'] = $_POST['imprime'];
  10. print_r($_SESSION);
  11. ?>


Reply

Marsh Posté le 25-08-2005 à 16:28:07    

J'ai testé rapidos chez moi avec des données bidon et ça fonctionne correctement. [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-08-2005 à 16:36:53    

au début de tes scripts ajoute

Code :
  1. error_reporting(E_ALL);


il y a sûrement des erreurs/warnings qui s'afficheront
 

Reply

Marsh Posté le 25-08-2005 à 16:48:12    

j'ai ajoute error_reporting(E_ALL); apres ma session_start, ça me donne rien de plus.
 
en fait j'ai refait un essai simple sans avoir à faire des requette dans ma base et ça fonctionne. C'est à partir du moment ou je fais la partie :

Code :
  1. while($champs = mysql_fetch_array($res3)) { 
  2.               print("<option value='".$champs['id_champ']."'" ); 
  3.               if($action != 'ajouter') 
  4.                  {if($champs['id_champ'] == $donneesmodele['id_champ']){print("selected" );} 
  5.                     } 
  6.               print(">".$champs['n_champ']." </option>" ); 
  7.               } 
  8.               print("</select> x " );


 
qu'il déconne  :( alors je continue à tester. merci de votre aide en tout cas.

Reply

Marsh Posté le 25-08-2005 à 16:58:19    

Je pense avoir compris. Les noms de tes variables de session correspondent à $id_champ qui lui-même correspond à des valeurs numériques (1, 2, 3). Donc ça implique des sessions qui s'appellent $_SESSION['1'][...], $_SESSION['2'][...] et qui sont incorrectes, car le nom d'une variable ne peut commencer par un chiffre.
 
Essaie de te débrouiller pour donner des noms de variable corrects aux attributs "value" de tes <option> (du <select> sur le champ), du genre 'champ1', 'champ2', etc.


Message édité par sielfried le 25-08-2005 à 16:59:45

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-08-2005 à 17:01:05    

j'ai trouvé, en fait quand je remplace le id_champ, par le n_champ, donc une chaine de caractere, ça marche
 
print("<option value='".$champs['id_champ']."'" );  
 
--> print("<option value='".$champs['n_champ']."'" );  
 
mais je comprends pas vraiment pourquoi  :??:

Reply

Marsh Posté le 25-08-2005 à 17:04:00    

Ben c'est ce que je viens d'expliquer. :)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-08-2005 à 17:11:34    

ah, je savais pas tout ça, mais je suis contente que ça marche maintenant ... ouf, ça commençait à me :heink: :pt1cable:  
 
merci beaucoup !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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