Codes postaux et villes dans un formulaire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 65 204 fois - Téléchargée 29 fois

Contenu du snippet

J'avais le problème suivant... en fait les problèmes suivants...

1) Je voulais que l'utilisateur n'ai qu'à entrer un code postal (CP) pour que la ville s'affiche automatiquement... facile me direz-vous (faire apparaitre une valeur y en fonction d'une autre x) oui, mais cas des CP avec plusieurs villes ?
il fallait donc qu'en cas de CP unique pour plusieurs villes, le champs texte 'ville' se change en liste (avec l'apparition d'un nouveau champs texte au cas ou la ville à choisir n'était dans dans la liste...)

2) Je ne voulais pas charger entièrement les 36 000 communes de France (pour l'affichage automatique), mais travailler qu'avec les communes d'une table. Les nouvelles communes, non connues donc, tapées pour la première fois, sont donc enregistrées dans une base, se limitant ainsi le travail aux seules communes entrées dans la base.

Vous suivez déjà le blem ?

J'ai donc créé une table SQL (villes) avec 'code_postal' (un code un 5 chiffre) et
'nom_ville' (le nom de la ville), tous les CP de la table sont chargés en PHP dans un JAVASCRIPT qui permet ensuite :
- d'afficher QUE le champs CP du formulaire lorsqu'il n'y a pas 5 chiffres
- d'afficher directement la ville (modifiable) dans un champs texte 'ville' une fois les 5 chiffres inscrits (champs vierge si le CP est inconnu)
- d'afficher une liste dans le cas ou un même CP est pour plusieurs communes (avec en plus un champs optionnel new_ville au cas ou...)

J'espère que cela vous aidera !

@+

Antoine "Dexterin" dexterin@fnac.net

Source / Exemple :


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\" value=\"\" >"; } 
	<?
	$cte_command = mysql_query("SELECT * FROM villes ORDER BY `code_postal` ASC", $dex_cte_db);
	$cte = 0;
	$cte_1 = "?";
	$cte_max = mysql_num_rows($cte_command) - 1;
	while ($cte <= $cte_max) 
		{
		$cte_2 = mysql_result($cte_command,$cte,code_postal);
		if ($cte != $cte_max)
			{	
			$cte_3 = mysql_result($cte_command,($cte + 1),code_postal);	
			}
		else 
			{ 
			$cte_3 = ""; 
			}
		if (($cte_1 == $cte_2) and ($cte_2 == $cte_3))
			{
			echo "ligne += \"<option value=\\\"" . mysql_result($cte_command,$cte,nom_ville) . "\\\">" . mysql_result($cte_command,$cte,nom_ville) . "</option>\\\"; ";
			}
		if (($cte_1 == $cte_2) and ($cte_2 != $cte_3))
			{
			echo "ligne += \"<option value=\\\"" . mysql_result($cte_command,$cte,nom_ville) . "\\\">" . mysql_result($cte_command,$cte,nom_ville) . "</option>\"; ligne += \"</select>\"; ligne += \"<BR> autre ? <input type=\\\"text\\\" name=\\\"ville\\\" id=\\\"new_ville\\\" size=\\\"18\\\" value=\\\"\\\">\"; cible.innerHTML = ligne; } ";
			}
		if (($cte_1 != $cte_2) and ($cte_2 == $cte_3))
			{
			echo "if (cp == " . $cte_2 . ") { ligne += \"<select name=\\\"ville\\\">\"; ligne += \"<option value=\\\"" . mysql_result($cte_command,$cte,nom_ville) . "\\\">" . mysql_result($cte_command,$cte,nom_ville) . "</option>\"; "; 
			}
		if (($cte_1 != $cte_2) and ($cte_2 != $cte_3))
			{ 
			echo "if (cp == " . $cte_2 . ") { cible.innerHTML = \"<input type=\\\"text\\\" name=\\\"ville\\\" id=\\\"ville\\\"   size=\\\"20\\\" value=\\\"" . mysql_result($cte_command,$cte,nom_ville) . "\\\">\"; } ";
			}
		$cte_1 = $cte_2;
		$cte_2 = $cte_3;
		$cte++;
		}
	mysql_free_result($cte_command);
	?> 
	}

et pour le code :

echo "<input type=\"text\" name=\"cp\" value=\"" . $cp . "\" size=\"5\" OnKeyUp=\"TestVille(this.form)\">";

echo "<TABLE><TR><TD valign=top align=right id=\"CaseVille\"></TD></TR></TABLE>";

le formulaire transmet alors 3 variables

cp (pour le code postal entré)
ville (pour la ville sélectionnée)

new_ville (automatiquement vide dans le cas d'un champs "texte" ville, et vide ou plein dans le cas d'une "liste" pour le champs ville)

Conclusion :


Pour le PHP, il faut préalablement que
$dex_cte_db = mysql_connect($dex_hostname, $dex_username, $dex_password);

C'est une variable que je stock dans un fichier req.infos.php que j'inclue systémétiquement au début de chaque page PHP...

A voir également

Ajouter un commentaire Commentaires
Messages postés
14
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
19 janvier 2010

Je me suis basé sur ce code pour créer le mien, car celui-ci me paraissait faut, je l'ai donc modifié. Il marche bien.
Si quelqu'un en a besoin, faite-moi signe.
Messages postés
28
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
19 juillet 2006

bonjour dexterin c'est pour savoir si tu saurais m'aider je n'arrive pas inserer ton code javascript dans le mien saurais tu me le faire stp
ps c'est super important merci d'avance

<script type= "text/javascript">
function verifpwd(zonesaisie)
{
if (zonesaisie.value=="")
{
alert (" remplisez tous les champs avec une * S.V.P!");
zonesaisie.focus();
return false;
}
return true;
}


</script>
<form name="formu" action="ajout_traitement_personnes.php" method="post" onsubmit="return (verifpwd(this.nom) && verifpwd(this.prenom)&& verifpwd(this.datenaissance)&& verifpwd(this.adresse)&& verifpwd(this.localite)&& verifpwd(this.Email)&& verifpwd(this.tel))">
<center><center>Formulaire d'identification</center>

Nom *, ,
----
Prénom *, ,
----
Date de naissance *,

----, Sexe </td><select name="sexe"><option>
<option>F
<option>M
</select>
----, Adresse * </td>,
----
Localité *, ,
----
Code Postal *, ,
----
Gsm *, ,
----
Tel , ,

----
Email, ,

<title>Sélection d'une image à envoyer dans un formulaire</title>
<script type =\"text/javascript\">
var im = null;
function montre_images() {
im = window.open(\"\", \"Apercu\", \"left=0,top=0,status=no,scrollbars=yes,menubar=no,resizable=yes,toolbar=no,dependent\");
if(im != null) {if(im.opener null) im.opener self;
im.document.open();
im.document.write(\"<html><head><title>Aperçu des images</title></head>\");
im.document.write(\"<center>Cliquez sur l'image choisie :
<table border=0 cellpadding=1 cellspacing=3>----
\");
<?php
// Le code PHP qui suit sert à lister les images du dossier où elles sont stockées
clearstatcache();
$dir = \"personnes\";
$pwd = getcwd();
chdir($dir);
$handle = @opendir(\".\");
$n = 0;while (false !($file readdir($handle))) { // Lister le contenu du dossier img contenant les images
if (is_file($file)) { // Ne pas retenir les répertoires
//$size = getimagesize($file);
//if($size[2] == \"1\" || $size[2] == \"2\" || $size[2] == \"3\") {
if (eregi(\".gif\", $file) || eregi(\".jpg\", $file) || eregi(\".png\", $file)) { // Ne retenir que les fichiers images (GIF, JPEG ou PNG)
echo \"im.document.write(\\", \\");\n\";
$n++;
if ($n == 3) { // Après 3 images, l'affichage descend d'une ligne
echo \"im.document.write(\\"----
\\");\n\";
$n = 0;
}
}
}
}
closedir($handle);
chdir($pwd);
?>

im.document.write("
</center></html>\n");
im.document.close();
im.focus();
return true;
}
}
</script>
</head>





</select>

</td></tr>






<!--Formulaire expérimental

-->

Une photo :







</table>
<tr><td> </td><td>



</center>

</form>










</select>

</td></tr>
Messages postés
3
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
3 novembre 2005

Bonjour,
Je n'arrive pas du tout à le faire fonctionner correctement:
Des le depard il m'affiche toute ma table de ville sur la page...soit un très long chargement peut que j'ai mal placé les balises!

<script language="javascript">
la_fct...
</script>
<?
echo "
Merci pour l'aide
Messages postés
1
Date d'inscription
lundi 18 juillet 2005
Statut
Membre
Dernière intervention
3 août 2005

Salut
Ouai sympa le code, mais ce qui serait cool c'est que qu'en plus tu fasse un dump de la table MySQL, histoire qu'on gagne un peu de temps à l'implémentation.
Merci
Messages postés
8
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
21 novembre 2004

THX
Tout à fait ce qu'il me faut!!!!
@+
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.