Listes dynamiques.

Jouban Messages postés 14 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 10 août 2004 - 22 juil. 2004 à 12:11
Jouban Messages postés 14 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 10 août 2004 - 22 juil. 2004 à 16:08
Bonjour à tous!

J'utilise des listes dynamiques avec utilisation d'une BD.
Le principe est la consultation de noms (présents dans la base) en fonction des départements et villes choisis.

Je m'explique:
j'ai une première liste remplie de départements dès le départ . Ensuite j'ai une seconde liste de villes qui se remplit en fonction du choix du département. Et enfin j'ai une troisième liste de noms qui se remplit en fonction du choix de la ville.
Quand aucun département n'est saisi, un message d'alerte s'affiche. Quand il n'y aucune ville pour le département choisi, les listes de villes et de noms restent à vide (normal). Quand j'ai choisi une ville et un nom, et que j'effectue une nouvelle recherche avec un nouveau département, les listes de villes et de noms se vident.
Pour ça, ça marche bien.
Le problème que je rencontre, c'est que ça marche quand j'ai en résultat une liste de villes avec une ville, mais dès que j'en ai plusieurs (j'ai essayé avec 2), la liste des noms reste à vide, alors que les villes existent.
Le problème doit venir de la boucle suivante:

*******
while($tab2=mysql_fetch_row($res2)) {
echo "<option";
// Si la variable 'ville' existe, on met le 'selected' dessus
if($ville==$tab2[0]) { echo " selected"; }
else { $ville=NULL; }
echo ">".$tab2[0]."</option>";
}
*******
En effet, les villes trouvées suites à la requête s'affichent bien dans la liste des villes, mais dès que je clique sur la première, elle reste affichée (rôle du 'selected'), mais aucun nom ne s'affiche alors qu'ils sont présents dans la base, et si je choisis la deuxième, elle ne reste pas affichée et aucun nom apparaît. C'est comme si on passait dans la boucle 'else { $ville=NULL; }'.

Je vous transmets le code (si ça intéresse certains):

*******
<?
// Connexion à la base de données et aux tables
include("Connexion.php");

// Vérification de l'existence de la variable et déclaration
// Et récupération de sa valeur
$departement=(isset($_POST['departement']) ) ? $_POST['departement'] : Null;
$ville=(isset($_POST['ville']) ) ? $_POST['ville'] : Null;
$patronyme=(isset($_POST['patronyme']) ) ? $_POST['patronyme'] : Null;

$req="SELECT * FROM Departements ORDER BY Departement";
// Interprétation de la requête, et permet d'afficher l'erreur MySQL s'il y en a une
$res=mysql_query($req) or die ('Erreur : '.mysql_error());
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<form method="post" action="">
<!--Liste des départements-->
<select name="departement" onChange="submit()">
<option selected value=00>Sélectionnez un département</option>
<?
while($tab=mysql_fetch_row($res)) {
echo "<option value=".$tab[0]."";
// Si la variable 'departement' existe, on met le 'selected' dessus
if($departement==$tab[0]) { echo " selected"; }
echo ">".$tab[1]."</option>";
}
?>
</select>

<!--Liste des villes-->
<select name="ville" onChange="submit()">
<?
if($departement) {
$req2="SELECT DISTINCT Ville FROM Archives WHERE Num_dept='$departement' ORDER BY Ville";
$res2=mysql_query($req2) or die ('Erreur : '.mysql_error());
$nb_enr2=mysql_num_rows($res2);
if($nb_enr2!=0) {
echo "<option>Sélectionnez une ville</option>";
while($tab2=mysql_fetch_row($res2)) {
echo "<option";
// Si la variable 'ville' existe, on met le 'selected' dessus
if($ville==$tab2[0]) { echo " selected"; }
else { $ville=NULL; }
echo ">".$tab2[0]."</option>";
}
}
else {
$ville=NULL;
}
}
else {
echo "<option></option>";
}
?>
</select>
</form>

<form method="post" action="Structure_deptville.php">
<?
echo "";
echo "";
?>

<!--Liste des patronymes-->
<select name="patronyme">
<?
if($ville) {
$req3="SELECT DISTINCT Nom FROM Archives WHERE Ville='".$ville."' ORDER BY Nom"; $res3=mysql_query($req3) or die ('Erreur : '.mysql_error());
$nb_enr3=mysql_num_rows($res3);
if($nb_enr3!=0) {
echo "<option>Sélectionnez un patronyme</option>";
while($tab3=mysql_fetch_row($res3)) {
echo "<option";
// Si la variable 'patronyme' existe, on met le 'selected' dessus
if($patronyme==$tab3[0]) { echo " selected"; }
echo ">".$tab3[0]."</option>";
}
}
else {
$patronyme=NULL;
}
}
else {
echo "<option></option>";
}
?>
</select>

</form>

</html>
*******

Si qqun peut m'aider... car je ne vois plus très bien quoi faire!
J'ai essayé d'être le plus clair possible, mais s'il y a besoin de renseignements complémentaires, n'hésitez pas!

Jouban

2 réponses

WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
22 juil. 2004 à 12:39
je crois que ce code peu t'aider (c'est du javascript) :
fr.com/code.aspx?ID=16149 http://www.javascriptfr.com/code.aspx?ID=16149

et je pense qu'il vaut mieu dans tu cas utiliser le javascript plûtot que le php... et a ce moment la je te recommande ce site :
.com/ http://www.editeurjavascript.com/
----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
[http://www.laxis.net [Laxis]]WhiteDwarf
----------------------
0
Jouban Messages postés 14 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 10 août 2004
22 juil. 2004 à 16:08
OK, je regarde ça.

Jouban
0
Rejoignez-nous