IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème de récup depuis ma DB -> accents non gérés


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Par défaut Problème de récup depuis ma DB -> accents non gérés
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Par défaut
    Bon, utiliser la fonction utf8_encode() me permet de ne plus avoir ce genre de problème, mais j'aimerais bien quand même savoir comment faire pour ne pas avoir du tout ce genre de problème à la base...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Par défaut éliminer les accents et les majuscules...
    Essaye donc ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function simple($str){
    		$str = trim($str);
    		$str = strtolower($str);
    		$str = strtr($str, "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ", "aaaaaaooooooeeeeciiiiuuuuyn");
    		$str = preg_replace("`[^a-z0-9'-]*`", "", $str);
     
    		return $str;
    }
    Et dis-moi si ça marche...

Discussions similaires

  1. Réponses: 19
    Dernier message: 13/05/2014, 11h27
  2. Accents non gérés en PHP
    Par helrick dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2013, 23h33
  3. [C#] PRoblème d'écriture d'un fichier avec accent
    Par shinchan dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/04/2006, 09h13
  4. Problème de récup de résultats d'une procédure stockée
    Par an_merle dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 12/01/2006, 10h08
  5. Problème de récup image via http://
    Par TK5EP dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2005, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo