bonjour,
je sais pas si ma question concerne plus mysql mais la voici
j'ai utilisé le script du tuto pour avoir un champ de formulaire avec autocompletion avec un deuxième champ select lié au premier. ça fonctionne parfaitement sauf que voila mon soucis
ma premiere table contient une liste de ville, la deuxieme une liste de code postaux.
par exemple si je veux taper la ville de Presles , quant je tapes presles il va me proposer 3 villes dans le premier select. je n'ai aucun moyen de savoir de quelle ville de Presles il s'agit. il faudrait qu'il m'affiche dans le premier champs une seul fois Presles et dans le deuxième select il afficherais les 3 codes postaux possible pour la ville de Presles. ainsi l'internaute pourra cliquer sur le code postal adéquat.
voici le formulaire tel que dans le tuto ( a la place de pays j'ai mis ville, a la place de ville j'ai mis code postaux )
et le php des requete sql
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <form action="?" method="post"> <div> <label for="pays">Pays : </label> <!-- Le champ "pays" 1ère autocomplétion --> <input type="input" name="pays" id="pays" value="" /> <div class="update" id="pays_update"></div> </div> <div> <label for="ville">Ville : </label> <!-- Le champ "ville" 2ème autocomplétion, liée à "pays" --> <input type="input" name="ville" id="ville" value="" /> <div class="update" id="ville_update"></div> </div> <div> <!-- Le champ caché "pays_id" pour pays --> <input type="hidden" name="pays_id" id="pays_id" value="" /> <!-- Le champ caché "ville_id" pour ville (si, si, sans déconner !) --> <input type="hidden" name="ville_id" id="ville_id" value="" /> </div> </form>
celui pour la ville ( dans l'exemple appelé pays )
celui pour les code postaux ( dans le code exemple appelé ville )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 if(isset($_POST['pays'])){ header('Content-type: text/html; charset=iso-8859-1'); // on fait la requête $sql = "SELECT `id_pays`, `nom_pays` FROM `pays` WHERE `nom_pays` LIKE '".$_POST['pays']."%'"; $req = mysql_query($sql); $i = 0; echo '<ul class="payss">'; // on boucle sur tous les éléments while($autoCompletion = mysql_fetch_assoc($req)){ echo '<li class="pays"><span class="informal" style="display: none;">'.$autoCompletion['id_pays'].'-idcache</span><div class="nom">'.$autoCompletion['nom_pays'].'</div></li>'; // on s'arrête s'il y en a trop if (++$i >= 10) die('<li>...</li></ul>'); } echo '</ul>'; die(); }
et voici le javascript pour la ville ( dans l'exemple pour le pays )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 elseif(isset($_POST['id_pays'])){ // renvoyé par le deuxième Autocompleter header('Content-type: text/html; charset=iso-8859-1'); // on fait la requête $sql = "SELECT `id_ville`, `nom_ville` FROM `villes` WHERE `nom_ville` LIKE '".$_POST['ville']."%' AND `id_pays`='".$_POST['id_pays']."'"; $req = mysql_query($sql); $i = 0; echo '<ul class="villes">'; // on boucle sur tous les éléments while($autoCompletion = mysql_fetch_assoc($req)){ echo '<li class="ville"><span class="informal" style="display: none;">'.$autoCompletion['id_ville'].'-idcache</span><div class="nom">'.$autoCompletion['nom_ville'].'</div></li>'; // on s'arrête s'il y en a trop if (++$i >= 10) die('<li>...</li></ul>'); } echo '</ul>'; die(); }
le javascript pour le code postal ( dans l'exemple pour la ville )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 new Ajax.Autocompleter ( 'pays', 'pays_update', 'ajax.autocompletion.php', { method: 'post', paramName: 'pays', afterUpdateElement: ac_return } );
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ville_completer = new Ajax.Autocompleter ( 'ville', 'ville_update', 'ajax.autocompletion.php', { method: 'post', paramName: 'ville', parameters: 'id_pays='+$F('pays_id'), afterUpdateElement: ac_return } );
merci
Partager