requet pour formulaire autocompletion et liste liée
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 )
Code:
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> |
et le php des requete sql
celui pour la ville ( dans l'exemple appelé pays )
Code:
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();
} |
celui pour les code postaux ( dans le code exemple appelé ville )
Code:
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();
} |
et voici le javascript pour la ville ( dans l'exemple pour le pays )
Code:
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
}
); |
le javascript pour le code postal ( dans l'exemple pour la ville )
Code:
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