|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
RECHERCHE DES VILLES ET CODES POSTAUX FRANÇAIS
Information sur la source
Description
Une source très simple, mais qui peut sans doute être utile!
J'ai un fichier possèdant toutes les villes françaises, et leur code postal (si si!).
J'utilise cette petite classe pour proposer une recherche : on peut taper un nom de ville, un code postal, voire juste un bout d'un des deux.
Via la méthoe Ajax, le script ressort une liste cliquable des résultats de la recherche.
Bref, tapez 75, et vous aurez toutes les villes dont le code postal commence par 75...vous pourrez cliquer sur un code postal ou une ville de cette liste pour la faire entrer dans le champ de saisie.
En soi, comme ça, tout seul, ça ne sert à rien. Mais cd'est très utile, croyez-moi, après intégration dans un projet :-)
A vous de l'intégrer (c'est relativement facile).
Source
- <?php
- class ocity {
- /**
- * private array aNomVilles, aCpVilles, aSoundexVilles, aPhonexVilles : data arrays
- */
- private $aNomVilles = array ();
- private $aCpVilles = array ();
- private $aSoundexVilles = array ();
- private $aPhonexVilles = array ();
- /**
- * public static string sResult : string used to store the result of the query
- */
- private $sResult = '';
-
- /**
- * public static string sSearch : string used to store the query
- */
- private static $sSearch = '';
- private static $_post = '';
-
- private $oSoundex;
- private $oPhonex;
- /**
- * public function __construct
- * constructor
- * @Param string dataFile : data filename.
- */
- public function __construct ($dataFile = 'data.dat', $soundex, $phonex) {
- $this -> oSoundex = $soundex;
- $this -> oPhonex = $phonex;
- $aLines = file ($dataFile);
- foreach ($aLines as $line) {
- $aWord = explode (';', $line);
- $this -> aCpVilles[] = $aWord[0];
- $this -> aNomVilles[] = $aWord[1];
- $this -> aSoundexVilles[] = $aWord[2];
- $this -> aPhonexVilles[] = $aWord[3];
- }
- }
-
- /**
- * callback public static function getFirst
- * returns an array with the results of the query
- * @Returns array
- */
- private static function getFirst ($val) {
- return (substr ($val, 0, strlen (self::$sSearch)) === self::$sSearch);
- }
-
- private static function mapLev ($val) {
- return levenshtein (self::$_post, $val);
- }
-
- /**
- * public function getSearch
- * returns the string result, called by the xmlhttp method
- * @Returns string sResult
- */
- public function getSearch () {
- if (isset ($_POST['data']) && '' !== trim ($_POST['data'])) {
- self::$sSearch = strtolower ($_POST['data']);
- if ($_POST['type'] === '0') {
- if (self::$sSearch === '*') {
- $aTmp = array_combine ($this -> aCpVilles, $this -> aNomVilles);
- if (isset ($_POST['sort']) && in_array ($_POST['sort'], array ('0', '2'))) {
- ksort ($aTmp);
- } else {
- asort ($aTmp);
- }
- $aTmp = array_combine ($this -> aCpVilles, $this -> aNomVilles);
- }
- elseif (is_numeric (self::$sSearch)) {
- $aTmp = array_filter ($this -> aCpVilles, array ('self', 'getFirst'));
- if (!empty ($aTmp)) {
- $aTmp = array_combine ($aTmp, array_intersect_key ($this -> aNomVilles, $aTmp));
- if (isset ($_POST['sort']) && in_array ($_POST['sort'], array ('0', '1'))) {
- ksort ($aTmp);
- } else {
- asort ($aTmp);
- }
- } else {
- $aTmp = array ();
- }
- } else {
- $aTmp = array_filter ($this -> aNomVilles, array ('self', 'getFirst'));
- if (!empty ($aTmp)) {
- $aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aTmp), $aTmp);
- if (isset ($_POST['sort']) && in_array ($_POST['sort'], array ('0', '2'))) {
- asort ($aTmp);
- } else {
- ksort ($aTmp);
- }
- } else {
- $aTmp = array ();
- }
- }
- } elseif ($_POST['type'] === '1') {
- if (!is_numeric (self::$sSearch)) {
- $this -> oSoundex -> build (self::$sSearch);
- self::$sSearch = $this -> oSoundex -> sString;
- self::$_post = strtolower ($_POST['data']);
- $aDump = array_filter ($this -> aSoundexVilles, array ('self', 'getFirst'));
- $aVilles = array_intersect_key ($this -> aNomVilles, $aDump);
- if (isset ($_POST['sort']) && $_POST['sort'] === '2') {
- $aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
- asort ($aTmp);
- } elseif (isset ($_POST['sort']) && $_POST['sort'] === '1') {
- $aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
- ksort ($aTmp);
- } else {
- $aLev = array_map (array ('self', 'mapLev'), $aVilles);
- if (!empty ($aLev) && !empty ($aVilles)) {
- array_multisort ($aLev, $aVilles);
- $aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
- } else {
- $aTmp = array ();
- }
- }
- }
- } else {
- if (!is_numeric (self::$sSearch)) {
- $this -> oPhonex -> build (self::$sSearch);
- self::$sSearch = $this -> oPhonex -> sString;
- self::$_post = strtolower ($_POST['data']);
- $aDump = array_filter ($this -> aPhonexVilles, array ('self', 'getFirst'));
- $aVilles = array_intersect_key ($this -> aNomVilles, $aDump);
- if (isset ($_POST['sort']) && $_POST['sort'] === '2') {
- $aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
- asort ($aTmp);
- } elseif (isset ($_POST['sort']) && $_POST['sort'] === '1') {
- $aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
- ksort ($aTmp);
- } else {
- $aLev = array_map (array ('self', 'mapLev'), $aVilles);
- if (!empty ($aLev) && !empty ($aVilles)) {
- array_multisort ($aLev, $aVilles);
- $aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
- } else {
- $aTmp = array ();
- }
- }
- }
- }
- $iCpt = 0;
- $this -> sResult .= '<div style="border: 1px solid #000000;width: 250px;background-color: #ffffff;"><span title="Trier par code postal" onclick="search (\''.$_POST['data'].'\',1, '.$_POST['type'].');" style="cursor: pointer; margin: 5px;font-weight: bold;text-align: left;width: 100px;">Code </span><span title="Trier par ville" onclick="search (\''.$_POST['data'].'\',2, '.$_POST['type'].');" style="width: 150px;cursor: pointer; margin: 5px;font-weight: bold; text-align: right;">Ville</span></div>';
- foreach ($aTmp as $cp => $ville) {
- $sColor = ($iCpt%2 === 0)?'background-color: #cccccc;':'background-color: #ffffff;';
- $this -> sResult .= '<div style="border: 1px solid #000000;width: 250px;'.$sColor.'"><span onclick="document.getElementById(\'mySearch\').value = this.innerHTML;" style="cursor: pointer; margin: 5px;'.$sColor.'">'.$cp.'</span><span onclick="document.getElementById(\'mySearch\').value = this.innerHTML;" style="cursor: pointer; margin: 5px;'.$sColor.'">'.$ville.'</span></div>';
- $iCpt ++;
- }
- echo $this -> sResult;
- } else {
- return false;
- }
- }
- }
- ?>
<?php
class ocity {
/**
* private array aNomVilles, aCpVilles, aSoundexVilles, aPhonexVilles : data arrays
*/
private $aNomVilles = array ();
private $aCpVilles = array ();
private $aSoundexVilles = array ();
private $aPhonexVilles = array ();
/**
* public static string sResult : string used to store the result of the query
*/
private $sResult = '';
/**
* public static string sSearch : string used to store the query
*/
private static $sSearch = '';
private static $_post = '';
private $oSoundex;
private $oPhonex;
/**
* public function __construct
* constructor
* @Param string dataFile : data filename.
*/
public function __construct ($dataFile = 'data.dat', $soundex, $phonex) {
$this -> oSoundex = $soundex;
$this -> oPhonex = $phonex;
$aLines = file ($dataFile);
foreach ($aLines as $line) {
$aWord = explode (';', $line);
$this -> aCpVilles[] = $aWord[0];
$this -> aNomVilles[] = $aWord[1];
$this -> aSoundexVilles[] = $aWord[2];
$this -> aPhonexVilles[] = $aWord[3];
}
}
/**
* callback public static function getFirst
* returns an array with the results of the query
* @Returns array
*/
private static function getFirst ($val) {
return (substr ($val, 0, strlen (self::$sSearch)) === self::$sSearch);
}
private static function mapLev ($val) {
return levenshtein (self::$_post, $val);
}
/**
* public function getSearch
* returns the string result, called by the xmlhttp method
* @Returns string sResult
*/
public function getSearch () {
if (isset ($_POST['data']) && '' !== trim ($_POST['data'])) {
self::$sSearch = strtolower ($_POST['data']);
if ($_POST['type'] === '0') {
if (self::$sSearch === '*') {
$aTmp = array_combine ($this -> aCpVilles, $this -> aNomVilles);
if (isset ($_POST['sort']) && in_array ($_POST['sort'], array ('0', '2'))) {
ksort ($aTmp);
} else {
asort ($aTmp);
}
$aTmp = array_combine ($this -> aCpVilles, $this -> aNomVilles);
}
elseif (is_numeric (self::$sSearch)) {
$aTmp = array_filter ($this -> aCpVilles, array ('self', 'getFirst'));
if (!empty ($aTmp)) {
$aTmp = array_combine ($aTmp, array_intersect_key ($this -> aNomVilles, $aTmp));
if (isset ($_POST['sort']) && in_array ($_POST['sort'], array ('0', '1'))) {
ksort ($aTmp);
} else {
asort ($aTmp);
}
} else {
$aTmp = array ();
}
} else {
$aTmp = array_filter ($this -> aNomVilles, array ('self', 'getFirst'));
if (!empty ($aTmp)) {
$aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aTmp), $aTmp);
if (isset ($_POST['sort']) && in_array ($_POST['sort'], array ('0', '2'))) {
asort ($aTmp);
} else {
ksort ($aTmp);
}
} else {
$aTmp = array ();
}
}
} elseif ($_POST['type'] === '1') {
if (!is_numeric (self::$sSearch)) {
$this -> oSoundex -> build (self::$sSearch);
self::$sSearch = $this -> oSoundex -> sString;
self::$_post = strtolower ($_POST['data']);
$aDump = array_filter ($this -> aSoundexVilles, array ('self', 'getFirst'));
$aVilles = array_intersect_key ($this -> aNomVilles, $aDump);
if (isset ($_POST['sort']) && $_POST['sort'] === '2') {
$aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
asort ($aTmp);
} elseif (isset ($_POST['sort']) && $_POST['sort'] === '1') {
$aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
ksort ($aTmp);
} else {
$aLev = array_map (array ('self', 'mapLev'), $aVilles);
if (!empty ($aLev) && !empty ($aVilles)) {
array_multisort ($aLev, $aVilles);
$aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
} else {
$aTmp = array ();
}
}
}
} else {
if (!is_numeric (self::$sSearch)) {
$this -> oPhonex -> build (self::$sSearch);
self::$sSearch = $this -> oPhonex -> sString;
self::$_post = strtolower ($_POST['data']);
$aDump = array_filter ($this -> aPhonexVilles, array ('self', 'getFirst'));
$aVilles = array_intersect_key ($this -> aNomVilles, $aDump);
if (isset ($_POST['sort']) && $_POST['sort'] === '2') {
$aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
asort ($aTmp);
} elseif (isset ($_POST['sort']) && $_POST['sort'] === '1') {
$aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
ksort ($aTmp);
} else {
$aLev = array_map (array ('self', 'mapLev'), $aVilles);
if (!empty ($aLev) && !empty ($aVilles)) {
array_multisort ($aLev, $aVilles);
$aTmp = array_combine (array_intersect_key ($this -> aCpVilles, $aDump), $aVilles);
} else {
$aTmp = array ();
}
}
}
}
$iCpt = 0;
$this -> sResult .= '<div style="border: 1px solid #000000;width: 250px;background-color: #ffffff;"><span title="Trier par code postal" onclick="search (\''.$_POST['data'].'\',1, '.$_POST['type'].');" style="cursor: pointer; margin: 5px;font-weight: bold;text-align: left;width: 100px;">Code </span><span title="Trier par ville" onclick="search (\''.$_POST['data'].'\',2, '.$_POST['type'].');" style="width: 150px;cursor: pointer; margin: 5px;font-weight: bold; text-align: right;">Ville</span></div>';
foreach ($aTmp as $cp => $ville) {
$sColor = ($iCpt%2 === 0)?'background-color: #cccccc;':'background-color: #ffffff;';
$this -> sResult .= '<div style="border: 1px solid #000000;width: 250px;'.$sColor.'"><span onclick="document.getElementById(\'mySearch\').value = this.innerHTML;" style="cursor: pointer; margin: 5px;'.$sColor.'">'.$cp.'</span><span onclick="document.getElementById(\'mySearch\').value = this.innerHTML;" style="cursor: pointer; margin: 5px;'.$sColor.'">'.$ville.'</span></div>';
$iCpt ++;
}
echo $this -> sResult;
} else {
return false;
}
}
}
?>
Conclusion
Je mets juste le code de la classe ocity.
Le reste est dans le zip :-)
A NOTER : la clef phonex a été calculée avec une valeur pour les type float de 12. Si votre php.ini montre quelquechose de diifférent :
precision = 12
veuillez régénérer le fichier data.dat
Fichier Zip
Historique
- 08 mars 2006 09:52:40 :
- mise à jour, quelques modifications pour avoir un code plus correct, et quelques modifications pour avoir une application plus complète :-)
- 08 mars 2006 15:29:03 :
- ajout d'une possibilité de trier, par ville, par code postal, une fois une liste affichée. Ajout aussi du joker : si on saisit *, toute la liste des villes françaises avec leur code postal s'affiche (attention, il y en a 40000...c'est un peu long ;-) )
- 09 mars 2006 10:13:12 :
- quelques optimisations ! Notamment au niveau d'Ajax : je ne réaffiche pas toute la page, mais uniquement le résultat de la requête.
- 09 mars 2006 10:22:13 :
- Modification : le script est désormais disponible en versions PHP5 et PHP4. Il suffit de changer les includes dans la page index.php comme indiqué.
- 09 mars 2006 13:11:28 :
- Nouvelle modification : j'ai remis le '' !== trim ($_POST['data']) pour une raison simple : '0' est considéré comme vide par la fonction empty : empty ('0') retourne donc true...ce que je ne veux surtout pas!
- 10 mars 2006 13:55:32 :
- Ajout de la doc, générée par ClassFuncDoc
- 15 mars 2006 09:25:14 :
- J'ai enlevé un bug sur php4.
- 17 mars 2006 12:11:24 :
- Ajout (uniquement php5 pour le moment, je ferai la version php4 après) de la recherche phonex, et soundex2 avec tri par pertinence.
Dans 'villes/'.
L'ancienne version est tjrs là, dans 'villes_normal/'.
- 17 mars 2006 12:44:26 :
- Ajout version PHP4
- 17 mars 2006 15:26:55 :
- correction d'un bug en php4, et mise à jour du fichier des villes et codes postaux
- 17 mars 2006 16:54:19 :
- Correction d'un bug en cas de recherche infructueuse sur la nouvelle version.
- 25 avril 2006 13:58:27 :
- Modifications pour prendre en compte le cas où différentes villes ont le même code postal.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Codes postaux dans un formulaire [ par jasd ]
Bonjour,J'ai trouvé le code proposé dans la page http://www.javascriptfr.com/code.aspx?ID=15991 sur l'utilisation des codes postaux dans un formulaire
Codes postaux dans un formulaire [ par jasd ]
Bonjour,J'ai trouvé le code proposé dans la page http://www.javascriptfr.com/code.aspx?ID=15991 sur l'utilisation des codes postaux dans un formulaire
Distance entre 2 codes postaux [ par abdoulax ]
J'ai besoin d'aide,J'ai une table qui contient une liste de magazin avec des codes postaux, je voudrai savoir comment faire pour savoir le code postal
Recherche avec ajax [ par gazalii ]
Bonjour a vous tous je cherche a faire une recherche avec ajax sur des pays (php avec ajax)je veux placer un combo et des que l'utitlisateur ecrit que
3 problèmes [ par damien_iset ]
Voici plusieurs choses que j'ai noté en navigant sur codes-sources. Les deux premières sont plutot des erreurs d'orthographes, je fais énormément de f
moteur de recherche AJAX [ par djlghoul ]
j'ai un site web mais j'aimerai bien l'organiser parceque il est totalement riche en tout les modules et les composants parmi eux moteur de recherche
gestion des plaintes [ par lucien1988 ]
slt je recherche des codes pour la gestions des plaintes.c'est un projet que je dois finaliser demain et je recherche des codes pour y parvenir.aidez
Recherche développeurs [ par cobra84 ]
Je recherche des développeurs motivés pour travailler sur le projet Ajax RPG (http://sourceforge.net/projects/ajaxrpg/) Présentation du projet : Ajax
Recherche emploi à distance [ par zeus_neon59 ]
Bonsoir,Il y a quelques temps déjà j'étais tomber sur une "pub" sur codes-sources parlant d'un site web regroupant des prestataires voulant des morcea
codes postaux [ par eax ]
salut!je cherche une table mysql avec tous les codes postaux de france et le nom des villes associées lolje sais c un gros travail, mais si qqun l'a d
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|