Apparition d'un select défectueuse
Bonsoir,
Voici la situation :
Je suis en plein développement d'une application Web pour une entreprise.
Tout est fini, je suis en train de finaliser en ajoutant quelques fonctions bien utiles. Du coup j'en arrive à mon problème.
Dans un formulaire, le technicien qui le rempli doit renseigner un champ pour le code postal et un autre pour la ville. J'ai pensé renseigner automatiquement la ville suivant le code postal. Jusqu'ici ça va.
Exemple :
1. Le code postal est 57000, la ville sera Metz.
2. Le code est 57650, il y a 2 communes différentes (Fontoy et Havange), donc le technicien aura à choisir dans un select la ville de son choix.
3. Mais s'il y a plus de 2 communes, le select est bien créé, mais il y a un blocage, il n'apparaît pas à l'écran et les deux cas précédents ne sont plus pris en compte.
Voici le code Javascript comprenant un peu de PHP :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| function testVille(obj) {
var cp = obj.cp.value;
var ligne = "";
var cible = document.getElementById("caseVille");
if (cp.length = 5) { cible.innerHTML = "<input type='text' name='ville' id='ville' />"; }
if (cp.length < 5) { cible.innerHTML = "<input type='hidden' name='ville' />"; }
<?
require_once ("fonctions.php");
connect();
// nombre total d'entrées :
$total = mysql_query("SELECT * FROM `villes` ORDER BY code_postal ASC");
$debut = 0;
$un_seul = "?";
// nombre d'entrées - 1 :
$max = mysql_num_rows($total) - 1;
while ($debut <= $max) {
$resultat = mysql_result($total,$debut,'code_postal');
if ($debut != $max) {
$resultat_en_cours = mysql_result($total,($debut + 1),'code_postal');
}
else {
$resultat_en_cours = "";
}
// si le code entré est connu de la BDD et qu'il n'y a q'un seul résultat, on affiche la ville :
if (($resultat == $un_seul) && ($resultat == $resultat_en_cours)) {
echo "ligne += \"<option value=\\\"".mysql_result($total,$debut,'nom_ville')."\\\">".mysql_result($total,$debut,'nom_ville')."</option>'; ";
}
// si le code entré est connu de la BDD et qu'il y a plusieurs résultats, on affiche les villes à l'aide d'un select :
if (($resultat != $un_seul) && ($resultat == $resultat_en_cours)) {
echo
"if (cp == ".$resultat.") {
ligne += \"<select name='ville'>\";
ligne += \"<option value=\\\"".mysql_result($total,$debut,'nom_ville')."\\\">".mysql_result($total,$debut,'nom_ville')."</option>\"; ";
}
// si le code entré est connu de la BDD et qu-il s'agit du dernier résultat, on affiche la ville et referme le select :
if (($resultat == $un_seul) && ($resultat != $resultat_en_cours)) {
echo
"ligne += \"<option value=\\\"".mysql_result($total,$debut,'nom_ville')."\\\">".mysql_result($total,$debut,'nom_ville')."</option>\";
ligne += \"</select>\";
ligne += \"<br /> autre ? <input type='text' name='new_ville' id='new_ville' size='18' value='' />\";
cible.innerHTML = ligne; }";
}
// si le code entré n'est pas connu de la BDD, on propose d'entrer une ville :
if (($resultat != $un_seul) && ($resultat != $resultat_en_cours)) {
echo
"if (cp == ".$resultat.") {
cible.innerHTML = \"<input type='text' name='ville' id='ville' size='20' value=\\\"".mysql_result($total,$debut,'nom_ville')."\\\" />\";
}";
}
$un_seul = $resultat;
$resultat = $resultat_en_cours;
$debut++;
}
// on vide la variable $total :
mysql_free_result($total);
?>
} |
Et le code HTML :
Code:
1 2 3 4 5
| <form action="#" method="post">
<input type="text" name="cp" size="5" maxlength="5" OnKeyUp="testVille(this.form);">
<p id="caseVille"></p>
<input type="submit" value="Ok" />
</form> |
Je ne comprends pas où serait l'erreur.
Quelq'un aurait-il vu ce que je m'obstine à ne pas voir ? :)