Hello,
J'ai chopé sur la toile un petit code sympa que j'ai complété pour faire de l'autocomplétion, ainsi qu'un fichier .sql contenant la liste de tous les pays du Monde (dans plusieurs langues).
Je vous épargne tous les insert, mais voici la création de la table :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| CREATE TABLE IF NOT EXISTS `Countries` (
`code` int(3) NOT NULL,
`alpha2` varchar(2) NOT NULL,
`alpha3` varchar(3) NOT NULL,
`langCS` varchar(45) NOT NULL,
`langDE` varchar(45) NOT NULL,
`langEN` varchar(45) NOT NULL,
`langES` varchar(45) NOT NULL,
`langFR` varchar(45) NOT NULL,
`langIT` varchar(45) NOT NULL,
`langNL` varchar(45) NOT NULL,
PRIMARY KEY (`code`),
UNIQUE KEY `alpha2` (`alpha2`),
UNIQUE KEY `alpha3` (`alpha3`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
Par exemple, la ligne France :
(250, 'FR', 'FRA', 'Francie', 'Frankreich', 'France', 'Francia', 'France', 'Francia', 'Frankrijk')
Mon fichier PHP ci-dessous quant à lui se charge de récupérer les données dans ma base, puis créer une liste dynamique de noms (10 max) que je retourne et affiche grâce à des keyup dans mon HTML.
Seulement il y a un problème, il ne gère pas les accents, me transformant par exemple Algérie en Alg�rie.
Voici le code PHP :
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
| <?php
// PHP5 Implementation - uses MySQLi.
// mysqli('localhost', 'yourUsername', 'yourPassword', 'yourDatabase');
$db = new mysqli('localhost', 'root' ,'myPassword', 'myBase');
if(!$db) {
// Show error if we cannot connect.
echo 'ERROR: Could not connect to the database.';
} else {
// Is there a posted query string?
if(isset($_POST['queryString'])) {
$queryString = $db->real_escape_string($_POST['queryString']);
// Is the string length greater than 0?
if(strlen($queryString) >0) {
// Run the query: We use LIKE '$queryString%'
// The percentage sign is a wild-card, in my example of countries it works like this...
// $queryString = 'Uni';
// Returned data = 'United States, United Kindom';
// YOU NEED TO ALTER THE QUERY TO MATCH YOUR DATABASE.
// eg: SELECT yourColumnName FROM yourTable WHERE yourColumnName LIKE '$queryString%' LIMIT 10
$query = $db->query("SELECT langFR FROM countries WHERE langFR LIKE '$queryString%' LIMIT 10");
if($query) {
// While there are results loop through them - fetching an Object (i like PHP5 btw!).
while ($result = $query ->fetch_object()) {
// Format the results, im using <li> for the list, you can change it.
// The onClick function fills the textbox with the result.
// YOU MUST CHANGE: $result->value to $result->your_colum
echo '<li onClick="fill(\''.$result->langFR.'\');">'.$result->langFR.'</li>';
}
} else {
echo 'ERROR: There was a problem with the query.';
}
} else {
// Dont do anything.
} // There is a queryString.
} else {
echo 'There should be no direct access to this script!';
}
}
?> |
Je suppose que le problème doit arriver au moment de traiter la requête dans $query, mais je ne vois pas comment pallier à ça.
Partager