Une liste déroulante en fonction d'une autre

Fermé
infoges Messages postés 9 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 4 avril 2010 - 1 avril 2010 à 17:09
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 3 avril 2010 à 09:56
Bonjour Tout le monde
Dans le cadre de la préparation de mon projet de fin d'étude, j'ai une tâche qui consiste à afficher une liste déroulante à partir d'une autre. Ces deux listes sont alimentées d'une base de données. Et comme je suis débutante en Java script j'ai effectué une recherche sur Google et j'ai trouvé un code qui me permet de réaliser ma tâche. J'ai essayé tant de fois de comprendre leur principe de fonctionnement sans cesse.
Merci bien de vous m'aider pour réaliser cette tâche .
et voici le code JavaScript qui me permet d'afficher la deuxième liste déroulante en fonction de la première


<script>
List = new Array();
function Remplir(valeur)
{
var sel="";
sel ="<select size='1' name='souscat'>";
// Parcourir le tableau
for (var i=0;i<List.length;i++)
{
// tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catégorie
if (List[i][1]==valeur)
{
// Ajouter une rubrique sous-catégorie au variable SEL
sel= sel + "<option value="+List[i][0]+">"+List[i][2]+"</option>";
}

}
sel =sel + "</select>";
// Modifier le DIV scat par la nouvelle List à partir du variable SEL
document.getElementById('scat').innerHTML=sel;
}
</script>

mais lors de l'affichage du contenu de la liste il y a un appel de cette fonction dans un code php
Dans l'attente de votre réponse, veuillez agréer mes salutations les plus distinguées
Amicalement

5 réponses

Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 901
1 avril 2010 à 17:46
Bonsoir,

sur ce forum en haut tu fais une recherche "listes deroulantes liees" dans le forum webmatering tu vas avoir une foule de post correspondant à ton pb
0
infoges Messages postés 9 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 4 avril 2010
2 avril 2010 à 17:10
Alain_42 j'ai réussi à trouver une solution mais n'est pus l'idéale parce que en résultat elle 'affiche tous les sous-critères de ma base de données mais mon objectif se focalise d'afficher les sous-critères en sélectionnant un critère de la première liste déroulante
et voici le code que j'ai utilisé


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
/**
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
*/
function sendData(param, page)
{
if(document.all)
{
//Internet Explorer
var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}//fin if
else
{
//Mozilla
var XhrObj = new XMLHttpRequest();
}//fin else

//définition de l'endroit d'affichage:
var content = document.getElementById("contenu");

XhrObj.open("POST", page);

//Ok pour la page cible
XhrObj.onreadystatechange = function()
{
if (XhrObj.readyState == 4 && XhrObj.status == 200)
content.innerHTML = XhrObj.responseText ;
}

XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XhrObj.send(param);
}//fin fonction SendData

</script>
</head>
<body>

<?php
// Appel à include "include.php";
include "include.php";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
// Séléction de tous les enregistrements de la table contact_client
$rq="Select * from contact_client";
$result= mysql_query ($rq) or die (mysql_error());
echo "<form method='POST' action=''>";?>
<select size="1" name="item" OnChange="sendData('item='+this.value,'lirecontact.php')" onKeyUp="sendData('item='+this.value,'lirecontact.php')">

<?php
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante de la table contact_client
echo "<option value=".($dt[0]).">".($dt[2])."</option>";
echo "<option value=".($dt[0]).">".($dt[3])."</option>";
echo "<option value=".($dt[0]).">".($dt[4])."</option>";
echo "<option value=".($dt[0]).">".($dt[5])."</option>";
echo "<option value=".($dt[0]).">".($dt[6])."</option>";
if ($i==0)
{
$j=$dt[0]; $i=1;
} // garder la valeur du premier enregistrement
}

?>
</select><br><br>



<div id="contenu">
<?php
// affichage des contacts appartenant à la selection
echo "<select size='1' name='Dynamic'>";
$rq="Select * order by Dynamic_field1;";
$result= mysql_query ($rq) or die (mysql_error());
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[4])."</option><br>";
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[5])."</option><br>";
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[6])."</option><br>";
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[7])."</option><br>";
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[8])."</option><br>";
}
echo "</select>";
?>
</div>

</form>
</body>
</html>



Dans l'attente de vos réponses je voudrais suggérer mes salutations les plus distinguées
Cordialement






Davotre répondsns l'attente de
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 901
2 avril 2010 à 18:16
ton premier fichier:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
/**
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
*/
function sendData(param, page)
{
if(document.all)
{
//Internet Explorer
var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}//fin if
else
{
//Mozilla
var XhrObj = new XMLHttpRequest();
}//fin else

//définition de l'endroit d'affichage:
var content = document.getElementById("contenu");

XhrObj.open("POST", page);

//Ok pour la page cible
XhrObj.onreadystatechange = function()
{
if (XhrObj.readyState == 4 && XhrObj.status == 200)
content.innerHTML = XhrObj.responseText ;
}

XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XhrObj.send(param);
}//fin fonction SendData

</script>
</head>
<body>

<?php
// Appel à include "include.php";
include "include.php";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
// Séléction de tous les enregistrements de la table contact_client
$rq="SELECT * FROM contact_client";
$result= mysql_query ($rq) or die (mysql_error());
echo "<form method='POST' action=''>";?>
<select size="1" name="item" OnChange="sendData('item='+this.value,'lirecontact.php')">
<!-- pourquoi onKeyUp ?  onChange suffit  -->

<?php
while ($dt=mysql_fetch_row($result))
{
//tu as un pb de copier coller tu as value=".($dt[0]) a ttes les lignes
// Remplir la liste déroulante de la table contact_client
echo "<option value=".($dt[0]).">".($dt[2])."</option>";
echo "<option value=".($dt[0]).">".($dt[3])."</option>";
echo "<option value=".($dt[0]).">".($dt[4])."</option>";
echo "<option value=".($dt[0]).">".($dt[5])."</option>";
echo "<option value=".($dt[0]).">".($dt[6])."</option>";
if ($i==0)
{
$j=$dt[0]; $i=1;
} // garder la valeur du premier enregistrement
}

?>
</select><br><br>



<div id="contenu">
<!-- la tu ne mets rien c'est ici que Ajax va venir ecrire la deuxième liste en fct du choix dans la premiere -->
</div>

</form>
</body>
</html>


et le fichier appele par Ajax: lirecontact.php

<?php
//recuperation de la valeur envoyee via Ajax
$item=$_POST['item'];
// affichage des contacts appartenant à la selection
// Appel à include "include.php";
include "include.php";
echo "<select size='1' name='Dynamic'>";
$rq="SELECT * FROM  ton_autre_table WHERE item='".$item."';"; //la tu adaptes suivant la table et le champ correspondant à litem
$result= mysql_query ($rq) or die (mysql_error());
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
//ci dessous tu dois avoir un pb de copier coller tu as value=".utf8_encode($dt[0]) à ttes les lignes
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[4])."</option><br>";
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[5])."</option><br>";
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[6])."</option><br>";
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[7])."</option><br>";
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[8])."</option><br>";
}
echo "</select>";
?>
0
infoges Messages postés 9 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 4 avril 2010
2 avril 2010 à 21:31
J'ai essayé sans cesse , le même problème apparait chaque fois.
Concernant les listes déroulantes :
j'ai une table contact lien
qui contient des des champs items fields: item_field1...item_field5
et j'ai une autre table contact qui contient les dynamicfield de1 à 5
et c'est pour cette raison je répéte toutes les lignes pour avoir le contenu de tout les champs
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 901
3 avril 2010 à 09:56
Ha ok , donc dans ta liste 1 tu as 5 lignes d'option chacune avec un item et repetées autant de fois que de client

et ensuite pour chacun des item tu veux afficher la liste des dynamicfiels

mais dans ta table "contact" qui contient les dynamicfield de1 à 5 est ce que tu as aussi un champ qui fait la liaison avec la table contact_client
un champ commun est ce le 0 ?
par ce qu'il faut pouvoir retrouver les valeurs de dynamicfiled correspondant à un itemfield caluse WHERE dans la requette

pour avoir un code plus parlant utilises plutôt:

mysql_fetch_assoc(....) au lieu de mysql_fetch_row


ensuite tu auras $dt['item1'] au lieu de $dt['1']

c'est plus parlant non ?
0