garder la Valeur d'une liste de choix

garder la Valeur d'une liste de choix - PHP - Programmation

Marsh Posté le 03-06-2009 à 10:24:08    

Bonjour je souhaiterais savoir comment laisser afficher la valeur que j'ai selectionner dans la première liste, lorsque je selectionne un element de cette liste.
J'utilise des formulaires. Les Onchange me "réinitialise" la liste a chaque fois.... J'ai vu qu'il faut utiliser selected... mais je ne suis pas arriver a obtenir le bon résultat.
 voici mon code  
 

Code :
  1. <?php
  2. session_start();
  3. ?>
  4. <?php
  5. function menu_deroulant_famille($file_name)
  6. // Définition des variables utilisées dans la fonction:
  7. // $row --> numéro de l'enregistrement du fichier
  8. // $famille --> nom de la famille de l'enregistrement précédent
  9. // $sousfamille --> nom de la sous famille de l'enregistrement précédent
  10. {
  11. $famille="";
  12. $sousfamille="";
  13. $row = 1;
  14.     echo "<SELECT name='lst-famille' Size='1' onchange='document.form1.submit();' >"; // Création d'une liste déroulante pour les familles et sous familles.
  15. $handle = fopen($file_name, "r" );
  16. //Lecture de tous les enregistrements du fichier
  17. while (($data_catalogue = fgetcsv($handle, 1000, ";" )) !== FALSE)
  18. {
  19.      $num = count($data_catalogue);
  20.      $row++;
  21.  if ($data_catalogue[0]!=$famille)  // nouvelle famille
  22.  {
  23.   if ($famille!="" ) echo "<OPTION> <br></OPTION>";
  24.    echo "<OPTION style='background:rgb(192,192,192)'>$data_catalogue[0]<br></OPTION>";
  25.  }
  26.  else // famille équivalente à la précédente donc recherche si nouvelle sous famille
  27.  {
  28.   if ($data_catalogue[1]!=$sousfamille)  // nouvelle sousfamille
  29.   {
  30.    echo "<OPTION>$data_catalogue[1]<br></OPTION>";
  31.   }
  32.  }
  33.  $famille=$data_catalogue[0]; // mémorisation de la famille de l'enregistrement courant
  34.  $sousfamille=$data_catalogue[1]; // mémorisation de la famille de l'enregistrement courant
  35.   
  36. }
  37. fclose($handle);
  38. echo "</SELECT>";
  39. }
  40. // Récupération de la Valeur de la Première liste
  41. if(isset($_POST["lst-famille"]))
  42. {
  43.          $Vfamille=$_POST["lst-famille"];
  44. function menu_deroulant_marque($file_name,$famille)
  45. // Définition des variables utilisées dans la fonction:
  46. // $row --> numéro de l'enregistrement du fichier
  47. // $famille --> nom de la famille ou sous famille où il faut rechercher les marques existantes
  48. // $marque --> nom de la marque correspondate
  49. {
  50. $marque="";
  51. $marque[0]="";
  52. $row = 1;
  53.     echo "<SELECT name='lst-marque' Size='1'>"; // Création d'une liste déroulante pour les marques.
  54. $handle = fopen($file_name, "r" );
  55. //Lecture de tous les enregistrements du fichier
  56. while (($data_catalogue = fgetcsv($handle, 1000, ";" )) !== FALSE)
  57. {
  58.  if (($data_catalogue[0]==$famille)  || ($data_catalogue[1]==$famille) || ($famille=="" ) || ($famille==$choix) || ($row==1)) // La famille ou la sous famille correspondent
  59.  {
  60.   //si la marque actuelle est différente de la marque précédente --> mémorisataion.
  61.    if ($marque[$row-1]!=$data_catalogue[2])
  62.   {
  63.    $marque[$row]=$data_catalogue[2]; // mémorisation de la marque pour le tri
  64.    $row++;
  65.   }
  66.  }
  67.           // if ($Vfamille==$famille) //&&(!isset($_SESSION[$marque]) Vérification si la valeur récupéré est égal à la valeur conçernant la marque.
  68.   // {
  69.            // echo "<OPTION> $data_catalogue[2]</OPTION>";
  70.             // $_SESSION[$marque]="aa";
  71.   // }  
  72.  // else if ($Vfamille==$sousfamille)//&&(!isset($_SESSION[$marque])
  73.   // {
  74.            // echo "<OPTION> $data_catalogue[2]</OPTION>";
  75.              // $_SESSION[$marque]="aaa";
  76.   // }  
  77. }
  78. fclose($handle);
  79. }
  80. //echo "<OPTION>$marque[1]<br></OPTION>";
  81. // for ($i=2; $i<$row ; $i++)
  82. // {
  83.  // if ($marque[$i]!="" )
  84.  // {
  85.   // echo "<OPTION>$marque[$i]<br></OPTION>";
  86.  // }
  87. // }
  88. echo "</SELECT>";
  89. }
  90.            
  91. // MAIN
  92. $catalogue="catalogue.csv";
  93. $indexbase="baseindex.csv";
  94. $choix="Choisissez une catégorie";
  95. $choixmarque="Choisissez une marque";
  96. $sel_famille="";
  97. $sel_marque="";
  98. ?>
  99. <html>
  100. <head>
  101. <form  name="form1" method="post" action="">
  102. <fieldset style="width: 1000px">
  103. <legend>Liste liées</legend>
  104. <?php
  105. menu_deroulant_famille($catalogue);
  106. menu_deroulant_marque($indexbase,$sel_famille);
  107. ?>
  108. </form>
  109. <?php
  110. echo $Vfamille;
  111. session_destroy();
  112. ?>
  113. </body>
  114. </html>

Reply

Marsh Posté le 03-06-2009 à 10:24:08   

Reply

Marsh Posté le 03-06-2009 à 13:00:25    

Tout d'abord, il faudrait mettre le choix dans une variable

if(isset($_POST["lst-famille"]))
  $choix-famille = $_POST["lst-famille"];

Puis, il faudrait tester cette variable lors de la création de la listbox en remplaçant

 echo "<OPTION style='background:rgb(192,192,192)'>$data_catalogue[0]<br></OPTION>";

par

if ($data_catalogue[0] == $choix-famille)
  echo "<OPTION style='background:rgb(192,192,192)' selected>$data_catalogue[0]</OPTION>";
else  
  echo "<OPTION style='background:rgb(192,192,192)'>$data_catalogue[0]</OPTION>";

N.B. J'ai enlevé le <br> parce que je crois qu'il ne sert à rien.

Reply

Marsh Posté le 03-06-2009 à 14:05:26    

Merci de ta réponse. Mais j'ai un petit problème pour placer le  
if(isset($_POST["lst-famille"])){
  $choix-famille = $_POST["lst-famille"];
}
 avant la fonction ? et je le ferme où ?

Reply

Marsh Posté le 03-06-2009 à 14:09:44    

Le if (isset ... existe déjà ligne à la ligne 48. Il n'y a pas besoin d'en prendre un nouveau. D'ailleurs, je n'avais pas vu que la valeur était déjà récupérée à la ligne 52 dans $Vfamille, et donc mon $choix-famille serait redondant. Désolé, je n'avais pas fait attention.


Message édité par olivthill le 03-06-2009 à 14:10:56
Reply

Marsh Posté le 03-06-2009 à 14:32:47    

Oui, j'ai donc remplacer le $choix-famille par $Vfamille... mais pas de résultat concluant

Reply

Marsh Posté le 03-06-2009 à 14:33:09    

je devrai pas placer le isset plus haut ?

Reply

Marsh Posté le 03-06-2009 à 14:53:01    

$choix-famille est incorrect, cela revient à soustraire la valeur de la constante famille à $choix. Le nom correct est $choix_famille.

Reply

Marsh Posté le 03-06-2009 à 15:04:36    

le problème ne vient plus de la car je l'ai remplacer par $Vfamille

Reply

Marsh Posté le 03-06-2009 à 15:05:51    

oui mais c'est tout de même utile de le dire, c'est une erreur que olivthill avait surement faite par inattention, mais tu n'as rien remarqué, tu risques de la commettre.

Reply

Marsh Posté le 03-06-2009 à 15:07:35    

Oui Merci de l'info :D

Reply

Sujets relatifs:

Leave a Replay

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