Page 1 sur 1

Liste deroulante

Posté : 13 févr. 2006, 11:53
par hashut
Salut
J'ai cree une liste deroulante as 3 niveau pour un formulaire .
je voudrais suivant :
le choix de liste A
le liste B et liste C soit independante
le probleme chaque liste affiche les deux choix .....
voir le probleme : http://www.net-utyl.org/formulaire/test.php

Code : Tout sélectionner

<? include("conf.php3"); $SQL="SELECT * FROM destination"; $result = mysql_query($SQL); ?> <script language="JavaScript"><!-- liste=new Array() liste[0]=new Array("vide !","") liste[1]=new Array("vide !","") <? while ($val = mysql_fetch_array($result)) { $SQL2 = "select titre from residence where destination = "; $SQL2 .= $val["id"]; $result2 = mysql_query($SQL2); $SQL_2 = "select titre from type where destination = "; $SQL_2 .= $val["id"]; $result_2 = mysql_query($SQL_2); ?> liste[<?echo $val["id"];?>]=new Array(<? while ($val2 = mysql_fetch_array($result2)) echo "\"".$val2["titre"]."\","; while ($val3 = mysql_fetch_array($result_2)) echo "\"".$val3["titre"]."\","; ?>"") <? } ?> function changeliste() { choix=document.getElementById("listeA").value; t='<select name="listeB" id="listeB">'; t2='<select name="listeC" id="listeC">'; for(i=0;i<liste[choix].length;i++) { t+="<option value=\""+liste[choix][i]+"\">"+liste[choix][i]+"</option>"; t2+="<option value=\""+liste[choix][i]+"\">"+liste[choix][i]+"</option>"; } document.getElementById("listeB").outerHTML=t+'</select>'; document.getElementById("listeC").outerHTML=t2+'</select>'; } --></script> <Table> <TR> <TD><b>Destination du bien : </b></TD></TR> <TR> <TD><select name=listeA onchange=changeliste()><option value=0>Selectionnez</option> <? mysql_data_seek($result,0); // movefirst while ($val = mysql_fetch_array($result)) { ?> <option value=<?echo $val["id"];?>> <? echo $val["titre"];?></option> <? } ?> </TD> </TR> <TR> <TD></select><BR><b>Résidence principale actuelle : </b></TD></TR> <TR> <TD><select name=listeB><option>Vide !</option></select></TD> </TR> <TR> <TD><select name=listeC><option>Vide !</option></select></TD> </TR> </TABLE>
quelqu'un maide merci

Posté : 13 févr. 2006, 16:19
par Mouki
Voilà un truc qui marche avec 2 menus... j'ai fait ça avec PEAR et ça ma généré ça... tu peux l'améliorer :
<html>
<body>
<script type="text/javascript">
//<![CDATA[
hs_ihsTest_0 = {
"0":"Belle & Sebastian",
"1":"Elliot Smith",
"2":"Beck"
}
hs_ihsTest_1 = {
"3":"Noir Desir",
"4":"Violent Femmes"
}
hs_ihsTest_2 = {
"5":"Wagner",
"6":"Mozart",
"7":"Beethoven"
}
function swapOptions(frm, grpName, eleIndex, nbElements, arName)
{
    var n = "";
    var ctl;

    for (var i = 0; i < nbElements; i++) {
        ctl = frm.form[grpName+'['+i+']'];
        if (!ctl) {
            ctl = frm.form[grpName+'['+i+'][]'];
        }
        if (i <= eleIndex) {
            n += "_"+ctl.value;
        } else {
            ctl.length = 0;
        }
    }

    var t = eval("typeof("+arName + n +")");
    if (t != 'undefined') {
        var the_array = eval(arName+n);
        var j = 0;
        n = eleIndex + 1;
        ctl = frm.form[grpName+'['+ n +']'];
        if (!ctl) {
            ctl = frm.form[grpName+'['+ n +'][]'];
        }
        for (var i in the_array) {
            opt = new Option(the_array[i], i, false, false);
            ctl.options[j++] = opt;
        }
    }
    if (eleIndex+1 < nbElements) {
        swapOptions(frm, grpName, eleIndex+1, nbElements, arName);
    }
}
//]]>
</script>

<form action="/testPear/docs/elements.php" method="get" name="frmTest" id="frmTest">
<select style="width: 20em;" name="ihsTest[0]" onchange="swapOptions(this, 'ihsTest', 0, 2, 'hs_ihsTest');">
	<option value="0">Pop</option>
	<option value="1">Rock</option>
	<option value="2">Classical</option>
</select><br /><select style="width: 20em;" name="ihsTest[1]">
	<option value="0">Belle & Sebastian</option>
	<option value="1">Elliot Smith</option>
	<option value="2">Beck</option>
</select>

</form>

</body>
</html>
Ca te va ?!?

liste deroulante

Posté : 13 févr. 2006, 17:33
par hashut
je ne sais pas met je vais teste
merci de ton aide qui lje pense vas m'aide
je te dirais sa
merci

Posté : 13 févr. 2006, 17:35
par Mouki
:D avec plaisir mon ami...

liste deroulante

Posté : 13 févr. 2006, 19:09
par hashut
le script et cool mais ne vas pas me servir
regarde si tu trouve pas pk liste b affiche B et C
et pareil Liste B affiche B et C
merci

Posté : 13 févr. 2006, 19:33
par Truc
C'est quoi le problème ?

peut tu reformuler, car je n'ai pas compris et le lien d'exemple ne fait pas grand chose :?

liste deroulante

Posté : 13 févr. 2006, 21:13
par hashut
en fait je veux quand click liste A
liste B affiche sont menu
liste C affiche sont menu

la comme jai fait
liste B affiche B et C et non que B
liste C affiche B et C et non que C

Posté : 13 févr. 2006, 23:12
par Truc
tu places toutes les données des requetes dans le meme array (liste) forcément que lors de la lecture les listes ne seront pas triées :wink:

as tu regardé le tuto sur les listes liées

liste deroulante

Posté : 13 févr. 2006, 23:33
par hashut
j'ai regardais mais je pas tout compris
comment lier les liste dans 2 array liste different
merci de votre aide

liste deroulante

Posté : 15 févr. 2006, 12:17
par hashut
Merci
jy suis arriver voila mon code
<?
include("conf.php3");
$SQL="SELECT * FROM destination";
$result = mysql_query($SQL);
?>
<script language="JavaScript"><!--
   liste=new Array()
   liste[0]=new Array("vide !","")
   liste_=new Array()
   liste_[0]=new Array("vide !","")
 <?
while ($val = mysql_fetch_array($result)) {
$SQL2 = "select titre from destination_2 where destination = ";
$SQL2 .= $val["id"];
$result2 = mysql_query($SQL2);
$SQL_2 = "select titre from destination_3 where destination = ";
$SQL_2 .= $val["id"];
$result_2 = mysql_query($SQL_2);
?>
liste[<?echo $val["id"];?>]=new Array(<?
while ($val2 = mysql_fetch_array($result2))
echo "\"".$val2["titre"]."\",";
?>"")
liste_[<?echo $val["id"];?>]=new Array(<?
while ($val3 = mysql_fetch_array($result_2))
echo "\"".$val3["titre"]."\",";
?>"")
<?
}
?>
function changeliste()
{
choix=document.getElementById("listeA").value;
t='<select name="listeB" id="listeB">';
for(i=0;i<liste[choix].length;i++)
{
t+="<option value=\"listeB\">"+liste[choix][i]+"</option>";

}
document.getElementById("listeB").outerHTML=t+'</select>';

choix=document.getElementById("listeA").value;
t2='<select name="liste_B" id="liste_B">';
for(i=0;i<liste_[choix].length;i++)
{
t2+="<option value=\"liste_B\">"+liste_[choix][i]+"</option>";
}

document.getElementById("liste_B").outerHTML=t2+'</select>';
}
--></script>
<Table>
<TR>
    <TD><b>Destination du bien : </b></TD></TR>
<TR>
    <TD><select name=listeA onchange=changeliste()><option value=0>Selectionnez</option>
    <?
    mysql_data_seek($result,0); // movefirst
    while ($val = mysql_fetch_array($result)) {
    ?>      <option value=<?echo $val["id"];?>> <?
      echo $val["titre"];?></option>
      <? }
      ?>
    </TD>
</TR>
<TR>
    <TD></select><BR><b>Résidence principale actuelle : </b></TD></TR>
<TR>
    <TD><select name=listeB><option>Vide !</option></select><BR></TD>
</TR>
<TR>
    <TD><b>Type : </B></TD>
</TR>
<TR>
    <TD><select name=liste_B><option>Vide !</option></select></TD>
</TR>
</TABLE>
merci encore de votre aide

Posté : 16 févr. 2006, 00:40
par Truc
et merci a toi d'avoir posté ta solution :pouce:

n'oublis pas le [Résolu] hein :wink: