Menu deroulant liés + mysql
le 17/05/2004 à 11:31
plc2k
Je poste le message ici aussi, car c'est à cheval entre php et java + mysql ...
Bonjour,
je viens de passer pas mal de temps à chercher le moyen de lien 2 menu deroulant (select) créé tous les 2 à partir d'une base SQL.
je m'explique,
j'ai un 1er menu deroulant avec les lettres de A à Z
je veux que lorsque je selectione une lettre dans le 1er ex : B
cela effectue une requete SQL pour remplir le 2eme menu deroulant avec que les mot commençant par B.
remplir les menu deroulant à partir de mysql cela ne me pose pas de probleme..
Mais par contre je ne trouve rien pour faire macher le coté dynamique avec un "onchange" et mysql.
tous les exemples que j'ai vu été fait avec des ARRAY tapé à la main et non pas généré via mysql.
Merci d'avance à ceux qui pourront me donner un exemple CONCRET.
à bientot.
si tu effectue la modif coté serveur , il faut refresh la page.
Tu peux aussi le faire coté client , dans ce cas il faut mamailler et loader tous les selects et les mettre en display:none pour qu'il ne soit pas visible directement.
Quand une lettre est choisi , tu affiche le select correspondant. (display:block)
En gros ca donnerait
<select name="truc" onChange="afficheSelect(this.form.name)">
<option value="a">A</option>
<option value="b">B</option>
....
</select>
et la fonction donnerait :
function afficheSelect(formulaire) {
// lettre recupérée
var lettre = document.forms[formulaire].elements['nom_du_select'].value;
// On affiche le block
document.getElementById("block_" + lettre).style.display = "block";
}
et le select
<div id="block_a" style="display:none">
<table><tr><td>
<select name="machin">
// tu affiche les valeurs de la lettre a
</select>
</td></tr></table>
Voila c'est super barbare mais ca evite de refresh , evidement la c'est simplifié parce que a chaque choix de lettre l'autre block ne disparait pas donc a toi de modifié ca.
Pour la solution coté serveur un simple refresh avec la lettre passé dans l'url et tu affiche le select si la variable lettre existe (beaucoup plu simple)
zebdinou pour les intimes / Blog : http://www.zebden.fr
le 17/05/2004 à 12:50
plc2k
Ok, pas mal, je crois que je comprend.
je vais essayer. MERCI
(sorry pour le multi post mais je savais pas trop ou le mettre vu que cela touchait plusieurs domaine)
le 17/05/2004 à 13:31
i M@N
Hello !
Sinon y'a un article (ine ingliche beute you vouile understande
) qui parle de ça
ici.
@+...
One Love, One Heart, One Unity.
le 17/05/2004 à 13:48
plc2k
zebden ca marche pas ..
mais c'est ptet moi, je n'arrive pas apparement à recuprer la valeur de "lettre" si je force une valeur dans :
document.getElementById('block_'+lettre).style.display = 'block';
c'est à dir si je remplace : 'block_'+lettre par qqchose, ca marche, j'arrive à faire afficher un autre select.
Mais sinon je n'ay arrive pas. voici mon code :
<html>
<head>
<LINK href='styles.css' rel=stylesheet type=text/css>
<SCRIPT language=javascript>
function afficheSelect(formulaire) {
// lettre recupérée
var lettre = document.forms[formulaire].elements['dest'].value;
// On affiche le block
document.getElementById("block_" + lettre).style.display = "block";
</SCRIPT>
</head>
<body>
</body>
</html>
<?
include ('inc/config.php');
$db = mysql_connect("$sql_serveur","$sql_user","$sql_passwd");
mysql_select_db("$sql_bdd",$db);
echo "<FORM METHOD=\"POST\" Action=\"$PHP_SELF\" NAME=\"affichetest\">";
echo "<SELECT NAME=\"dest\" onChange=\"afficheSelect(this.form.name)\">";
$query="SELECT DISTINCT login,id_membre FROM membres ORDER BY login ASC";
$result=mysql_query($query);
while ($data=mysql_fetch_object($result)) {
$id_dest=$data->id_membre;
$destinataire=$data->login;
echo "<OPTION value='$id_dest;$destinataire' $s>$destinataire</OPTION>" ;
}
echo "</SELECT>";
echo "</FORM>";
echo"<div id='block_trouduc' style='display:none'>";
echo"<table><tr><td>";
echo"<select name='machin'>";
// tu affiche les valeurs de la lettre a
echo"<option value='a'>A</option>";
echo"<option value='b'>B</option>";
echo"</select>";
echo"</td></tr></table></div>";
?>
Ta fonction n'est pas fermé :
function truc() { }
il manque une accolade.
et pour le nom du block met la lettre et pas sur le select avec les lettres mais le select de la lettre correspondante.
Il faut aussi mettre la balise form a la fin je pense pour pouvoir recuperer la lettre
document => formulaire => select => lettre
zebdinou pour les intimes / Blog : http://www.zebden.fr
le 17/05/2004 à 14:28
plc2k
j'ai fait un document.write de la variable lettre et en fait j'obtiens : 2;trouduc
alors que je n'ai besoin que de "trouduc"
(desolé pour ce nom peu cavalier ...)
Sorry je suis une bille en js .....mais je te remercie de ton aide, c'est sympas.
le 17/05/2004 à 14:32
plc2k
pfff c'est bon ca marche ... j'ai repris à) partir d'un de mes formulaires, et dans celui ci j'avais concatainer 2 variable .. d'ou le 2;trouduc .....
donc now ca marche.
Je continue à travailler sur le truc.
MERCI pour tout
le 17/05/2004 à 14:47
plc2k
euh, par contre, now ca marche mais, lorsque je fait une selection, ca m'affiche bien 1 DIV, si je fais une 2eme selection (une differentes, rataché elle aussi à un DIV) ca m'affiche bien le 2eme DIV mais sans cacher le 1er ..
le 17/05/2004 à 15:08
i M@N
Reuh ...
Pour l'histoire du DIV, il faut spécifier un z-index dans ses propriétés css :
#div1 {
z-index: 1;
}
#div2 {
z-index: 2;
}
et c'est le z-index le plus élevé qui sera par dessus celui qui est le plus faible (ici div2).
@+...
One Love, One Heart, One Unity.