Lier 2 listes déroulantes en php

Fermé
floflo30 - 19 août 2003 à 18:04
 marmoule - 22 août 2003 à 13:58
Je viens de mettre en place le code suivant
<?php 

include("_connex.php");

?>
<SCRIPT LANGUAGE="JavaScript">

function ModifierListe(code_item) {
  
  lg = document.form1.zlEtab.length;
  
  // On vide la liste
  for (i = lg - 1; i >= 0; i--) {
    document.form1.zlEtab.options[i] = null;
  }
    
  code_rub = document.form1.zlRubrique.selectedIndex;

<?php


$sql = "SELECT NTYPE FROM TYPE";

$resultat=mysql_query($sql);

$max_lignes = 0;
$option_max = '';

while ($enr = mysql_fetch_array($resultat)) {
  
  $sql  = "SELECT NETAB, NOMETAB ";
  $sql .= "FROM ETABLISSEMENT ";
  $sql .= "WHERE NTYPE='".$enr[0]."'";
  $sql .= "ORDER BY NETAB";
echo $sql;
  $resultat2 = mysql_query($sql);

  echo "  if (document.form1.zlRubrique.options[code_rub].value == ".$enr[0].") {\n";
  echo "    document.form1.zlEtab.length = ".(mysql_num_rows($resultat2)).";\n";
  $cpt = 0;
  while ($enr2 = mysql_fetch_array($resultat2)) {
    echo "    document.form1.zlEtab.options[".$cpt."].value = ".$enr2[0].";\n";
    echo "    document.form1.zlEtab.options[".$cpt."].text  = \"".$enr2[1]."\";\n";
    echo "    if (code_item == ".$enr2[0].") document.form1.zlEtab.options[".$cpt."].selected = true;\n";
    $cpt++;
    if ($cpt > $max_lignes) $max_lignes = $cpt;
    if (strlen($enr2[1]) > strlen($option_max)) $option_max = $enr2[1];
  }
  echo "  }\n";

}

?>
      
}  

</SCRIPT>


<?php

// ----------------------------------------------------------------------------
// Liste Rubriques
// ----------------------------------------------------------------------------
$sql = "SELECT * FROM TYPE;";
$resultat=mysql_query($sql);

echo "<FORM METHOD=POST NAME='form1'>";

echo "<BR> <B>Rubriques</B> ";
echo " <SELECT NAME='zlRubrique' onChange='ModifierListe(-1)'>\n";
if (!isset($zlRubrique)) $zlRubrique = - 1; 
while ($enr = mysql_fetch_array($resultat)) {
  echo "<OPTION VALUE='".$enr[0]."'";
  if ($zlRubrique == $enr[0]) echo " SELECTED";
  echo ">".htmlspecialchars($enr[1])."</OPTION>\n";
}
echo "</SELECT> \n";


echo "<br> <B>Etablissement</B> ";
echo " <SELECT NAME='zlEtab'>\n";
for ($cpt = 0; $cpt < $max_lignes; $cpt++)
  echo "<OPTION>".ereg_replace(".", "--", $option_max)."</OPTION>\n";
echo "</SELECT> \n";
if (!isset($zlEtab)) $zlEtab = -1;
echo "<SCRIPT LANGUAGE='JavaScript'>\n;ModifierListe(".$zlEtab.");\n</SCRIPT>\n";


echo "<INPUT TYPE='submit' VALUE='Valider'>\n";

echo "</FORM>";


echo "Sélection :<BR>\n";

if (isset($zlRubrique) && $zlRubrique != "") {
  $sql = "SELECT * FROM TYPE WHERE code='".$zlRubrique."'";
$resultat=mysql_query($sql);
  $enr = @mysql_fetch_array($resultat);
  echo "Rubrique = $zlRubrique [$enr[0]]<BR>\n";
  echo "Rubrique = $zlRubrique [$enr[1]]<BR>\n";
}

if (isset($zlEtab) && $zlEtab != "" && $zlEtab != -1) {
  $sql = "SELECT NOMETAB FROM ETABLISSEMENT WHERE code='".$zlEtab."'";
$resultat=mysql_query($sql);
  $enr = @mysql_fetch_array($resultat);
  echo "Item = $zlEtab [$enr[0]]<BR>\n";
}

?>  

</html>

Je veux qu'en fonction de la rubrique choisie s'affiche mes établissement, probléme ma liste établissement reste vide est apparait des ---- dedans.
A voir également:

4 réponses

salut..
c'est un peu le bordel ton code non ?
désolé mais je ne capte pas pourquoi t'as pas fé plus simple..
et puis ca manque un peu d'explication...
désolé
1
Explique moi comment faire plus simple, svp.
J' ai 2 listes déroulantes, je veux qu'à partir d'une sélection effectuée dans une liste s'affiche dans mon autre les données en relation avec le premier choix effectué.
tchao
@++
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
21 août 2003 à 15:22
Slt Floflo30,

Ton code a l'air correcte. ;-)

A priori le pb peut provenir de :

1 - Le champ NTYPE n'est pas le 1er champ de ta table TYPE (mais je pense que si ...)

2 - Le champ NTYPE comporte des lettres (mais là je ne fais que supposer ...)
A tout hasard remplace :

  echo "  if (document.form1.zlRubrique.options[code_rub].value == ".$enr[0].") {\n";


par :


  echo "  if (document.form1.zlRubrique.options[code_rub].value == '".$enr[0]."') {\n";


En encadrant chaque valeur de $enr[0] avec des apostrophes.

Sinon bah j'ai pas trop d'idée pour l'instant ...
Eventuellement poste le code de ta page mais uniquement le code HTML (après traitement par le préprocesseur PHP)


@+

PhP    [Push the button,Don't push the
.         button,Trip the station,Change the channel]
0
NTYPE est du numérique
Voila l'éxécution:

function ModifierListe(code_item) {

lg = document.form1.zlEtab.length;

// On vide la liste
for (i = lg - 1; i >= 0; i--) {
document.form1.zlEtab.options[i] = null;
}

code_rub = document.form1.zlRubrique.selectedIndex;

if (document.form1.zlRubrique.options[code_rub].value == 1) {
document.form1.zlEtab.length = 11;
document.form1.zlEtab.options[0].value = 1;
document.form1.zlEtab.options[0].text = "Le Beau Rivage";
if (code_item == 1) document.form1.zlEtab.options[0].selected = true;
document.form1.zlEtab.options[1].value = 2;
document.form1.zlEtab.options[1].text = "Camping La Forêt";
if (code_item == 2) document.form1.zlEtab.options[1].selected = true;
document.form1.zlEtab.options[2].value = 4;
document.form1.zlEtab.options[2].text = "La Croix Clémentine";
if (code_item == 4) document.form1.zlEtab.options[2].selected = true;
document.form1.zlEtab.options[3].value = 5;
document.form1.zlEtab.options[3].text = "Domaine des Fumades";
}
if (document.form1.zlRubrique.options[code_rub].value == 2) {
document.form1.zlEtab.length = 29;
document.form1.zlEtab.options[0].value = 3;
document.form1.zlEtab.options[0].text = "HÔTEL RESTAURANT LE RICHE";
if (code_item == 3) document.form1.zlEtab.options[0].selected = true;
document.form1.zlEtab.options[1].value = 10;
document.form1.zlEtab.options[1].text = "HÔTEL RESTAURANT LA DRAILLE";
if (code_item == 10) document.form1.zlEtab.options[1].selected = true;
document.form1.zlEtab.options[2].value = 11;
document.form1.zlEtab.options[2].text = "HÔTEL ORLY";
if (code_item == 11) document.form1.zlEtab.options[2].selected = true;
document.form1.zlEtab.options[3].value = 12;
document.form1.zlEtab.options[3].text = "HÔTEL RESTAURANT LE CEVENOL";
if (code_item == 12) document.form1.zlEtab.options[3].selected = true;
document.form1.zlEtab.options[4].value = 13;
document.form1.zlEtab.options[4].text = "HÔTEL LA PORTE DES CEVENNES";
if (code_item == 13) document.form1.zlEtab.options[4].selected = true;
document.form1.zlEtab.options[5].value = 14;
document.form1.zlEtab.options[5].text = "HÔTEL ERMITAGE MEISSONNIER";
if (code_item == 14) document.form1.zlEtab.options[5].selected = true;
document.form1.zlEtab.options[6].value = 15;
document.form1.zlEtab.options[6].text = "HÔTEL LE MAS DU TERME";
if (code_item == 15) document.form1.zlEtab.options[6].selected = true;
document.form1.zlEtab.options[7].value = 26;
document.form1.zlEtab.options[7].text = "HOSTELLERIE LE CASTELLAS";
if (code_item == 26) document.form1.zlEtab.options[7].selected = true;
document.form1.zlEtab.options[8].value = 28;
document.form1.zlEtab.options[8].text = "Motel Le Marguerittes";
if (code_item == 28) document.form1.zlEtab.options[8].selected = true;
document.form1.zlEtab.options[9].value = 29;
document.form1.zlEtab.options[9].text = "Nimotel";
if (code_item == 29) document.form1.zlEtab.options[9].selected = true;
document.form1.zlEtab.options[10].value = 30;
document.form1.zlEtab.options[10].text = "Novotel";
if (code_item == 30) document.form1.zlEtab.options[10].selected = true;
document.form1.zlEtab.options[11].value = 31;
document.form1.zlEtab.options[11].text = "Oustau Camarguen";
if (code_item == 31) document.form1.zlEtab.options[11].selected = true;
document.form1.zlEtab.options[12].value = 32;
document.form1.zlEtab.options[12].text = "Résidence Ulysse";
if (code_item == 32) document.form1.zlEtab.options[12].selected = true;
document.form1.zlEtab.options[13].value = 33;
document.form1.zlEtab.options[13].text = "Résitel";
if (code_item == 33) document.form1.zlEtab.options[13].selected = true;
document.form1.zlEtab.options[14].value = 34;
document.form1.zlEtab.options[14].text = "Magnanerie de Bernas";
if (code_item == 34) document.form1.zlEtab.options[14].selected = true;
document.form1.zlEtab.options[15].value = 35;
document.form1.zlEtab.options[15].text = "Stevenson Tavern";
if (code_item == 35) document.form1.zlEtab.options[15].selected = true;
document.form1.zlEtab.options[16].value = 36;
document.form1.zlEtab.options[16].text = "Vieux Castillon";
if (code_item == 36) document.form1.zlEtab.options[16].selected = true;
document.form1.zlEtab.options[17].value = 37;
document.form1.zlEtab.options[17].text = "Acanthe du Temple Hôtel";
}


}

</SCRIPT>


<FORM METHOD=POST NAME='form1'><BR> <B>Rubriques</B>  <SELECT NAME='zlRubrique' onChange='ModifierListe(-1)'>
<OPTION VALUE='1'>Campings</OPTION>
<OPTION VALUE='2'>Hôtels</OPTION>
<OPTION VALUE='3'>Gîtes</OPTION>
<OPTION VALUE='4'>Chambres d'hôtes</OPTION>
<OPTION VALUE='5'>Activités touristiques</OPTION>
<OPTION VALUE='6'>Immobilier</OPTION>
<OPTION VALUE='7'>Entreprises Commerciales</OPTION>
<OPTION VALUE='8'>Entreprises Artisanales</OPTION>
<OPTION VALUE='9'>Entreprises Industrielles</OPTION>
<OPTION VALUE='10'>Associations</OPTION>
</SELECT> 
<br> <B>Etablissement</B>  <SELECT NAME='zlEtab'>
<OPTION>------------------------------------------------------------</OPTION>
<OPTION>------------------------------------------------------------</OPTION>
<OPTION>------------------------------------------------------------</OPTION>
<OPTION>------------------------------------------------------------</OPTION>
<OPTION>------------------------------------------------------------</OPTION>
</SELECT> 
<SCRIPT LANGUAGE='JavaScript'>
;ModifierListe(-1);
</SCRIPT>
<INPUT TYPE='submit' VALUE='Valider'>
</FORM>Sélection :<BR>
Rubrique = -1 []<BR>
Rubrique = -1 []<BR>


</html>
0
Je vais essayer de t'aider mais je n'ai pas eu le courage de lire ton code ... dslé

Je te conseille de faire une iframe qui pointera vers une page avec ta 2è liste déroulante.
Ainsi lorsque tu fera ton choix dans la 1ère liste déroulante tu auras en paramètres cachés (<input type=hidden name=a value=$a).
Ensuite tu exécutes ta requête dans la iframe avec le paramètre cachés et l'affichage de ta 2è liste déroulante peut se faire corretement !

enfin je sais pas si c'est trés clair ....
0
il y a une acoolade bizare dans ton code :


  echo "  }\n";

}

?>
      
}                                                            <=== Ici on est plus en php

</SCRIPT>


C'est peut etre ca ton pb, en fait j'ai la flemme de lire le code :p
0