Recherche avec like et collate UTF8 php
Résolu
djanahana
Messages postés
82
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Svp, ça fait des jours que j'ai essayer de résoudre le problème que j'ai avec une recherche
d'une enregistrement de ma BD mySQL mais sans solution
la requete est
Lors de l'exécution de ma requête dans phpmyadmin elle s'exécute bien mais si je la mettre dans un script php elle me retourne 0 ligne .
j'ai tout fait SET NAMES UTF8,SET CHARACTER,<head> <meta ..charset utf8 ,........>
franchement je ne sais pas ou se trouve le problème
ma base contient de langue arabe et français,la recherche en français marche très bien .
merci d'avoir lire mon message
Svp, ça fait des jours que j'ai essayer de résoudre le problème que j'ai avec une recherche
d'une enregistrement de ma BD mySQL mais sans solution
la requete est
select * from table COLLATE utf8_bin like '%$_POST['titre']%'
Lors de l'exécution de ma requête dans phpmyadmin elle s'exécute bien mais si je la mettre dans un script php elle me retourne 0 ligne .
j'ai tout fait SET NAMES UTF8,SET CHARACTER,<head> <meta ..charset utf8 ,........>
franchement je ne sais pas ou se trouve le problème
ma base contient de langue arabe et français,la recherche en français marche très bien .
merci d'avoir lire mon message
A voir également:
- Recherche avec like et collate UTF8 php
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Voir like instagram - Guide
- Coco like - Accueil - Réseaux sociaux
- Recherche photo - Guide
13 réponses
Je vous conseille de faie toute votre chaîne logicielle en UTF8:
http://html5.immo-scope.com/index.php?page=general/applisFullUtf8
vous n'aurez plus besoin de COLLATE
http://html5.immo-scope.com/index.php?page=general/applisFullUtf8
vous n'aurez plus besoin de COLLATE
Bonjour
Ta requête n'est pas correcte...
c'est where champ like qq chose. Si ta variable est $valeur :
Et comme le disait mpmp93, en faisant tout en utf8, on n'a plus besoin de COLLATE.
Ta requête n'est pas correcte...
c'est where champ like qq chose. Si ta variable est $valeur :
$sql = "select * from table COLLATE utf8_bin WHERE unchamp like '%$valeur %'"
Et comme le disait mpmp93, en faisant tout en utf8, on n'a plus besoin de COLLATE.
c'est juste une erreur de frappe
C'est souvent à cause des erreurs de frappe que ça ne marche pas.
L'espace entre valeur et % dans '%valeur %', c'est une faute de frappe aussi ?
C'est souvent à cause des erreurs de frappe que ça ne marche pas.
L'espace entre valeur et % dans '%valeur %', c'est une faute de frappe aussi ?
Je viens d'essayer chez moi. Deux remarques :
1 - Le COLLATE sur la table est une erreur, il faut le faire sur une colonne :
ou , mieux, pas de COLLATE du tout si ta table est déjà en utf-8
2 - D'autre part, j'ai ajouté après la sélection de la base :
Avec ces deux modifications, ton script marche bien chez moi, même sur un texte en arabe. Il trouve bien des titres complets ou incomplets (enfin, moi j'ai mis des lettres arabes au hasard)
1 - Le COLLATE sur la table est une erreur, il faut le faire sur une colonne :
$sql = "select * from these WHERE titre COLLATE utf8_bin like '%$titre%'";
ou , mieux, pas de COLLATE du tout si ta table est déjà en utf-8
$sql = "select * from these WHERE titre like '%$titre%'";
2 - D'autre part, j'ai ajouté après la sélection de la base :
mysql_query('SET NAMES UTF8');
Avec ces deux modifications, ton script marche bien chez moi, même sur un texte en arabe. Il trouve bien des titres complets ou incomplets (enfin, moi j'ai mis des lettres arabes au hasard)
Bonjour monsieur le pere ,
J'avais essayé ce vous me disez mais toujours le meme probeleme ,pouvez vous me donné le script de creation de votre Base de Données ,
Le voila ce qui j'ai fait
merci encore une fois
J'avais essayé ce vous me disez mais toujours le meme probeleme ,pouvez vous me donné le script de creation de votre Base de Données ,
Le voila ce qui j'ai fait
<?php header('Content-Type: text/html; charset=UTF-8'); //requets pour l'affichage de nombre des these par facultées // connection à la DB //mysql_free_result($result); $cnx = mysql_connect( "localhost", "root", "" ) ; //sélection de la base de données: $db = mysql_select_db( "these3" ) ; mysql_query("SET NAMES 'utf8';",$cnx); mysql_query("SET CHARACTER SET 'utf8';",$cnx); mysql_query("SET COLLATE SET 'utf8_bin';",$cnx); mysql_query ("set character_set_client='utf8';",$cnx); mysql_query ("set character_set_results='utf8';",$cnx); mysql_query ("set collation_connection='utf8_bin';",$cnx); //titre: $titre = utf8_decode($_GET["titre"]) ; //auteur: $auteur = utf8_decode($_GET["auteur"]) ; //$dep=$_GET["department"]; $sql = "SELECT *FROM these WHERE (auteur COLLATE utf8_bin like '%$auteur%') AND (titre COLLATE utf8_bin like '%$titre%' ) ORDER BY auteur " ; $result = mysql_query($sql,$cnx) or die ("Erreur : ".mysql_error() ); $total = mysql_num_rows($result); // si on a récupéré un résultat on l'affiche. ?>
merci encore une fois
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Essayer ceci:
$search = $_POST['titre'];
$sql = "select * from table COLLATE utf8_bin like '%$search%'";
A+
Essayer ceci:
$search = $_POST['titre'];
$sql = "select * from table COLLATE utf8_bin like '%$search%'";
A+
merci pour la réponse ,j'a fait même
$sql = "select * from table COLLATE utf8_bin like '%valeur %'"; ou valeur c'est une valeur que j'ai dans ma base mais toujours le même problème .
merci beaucoup
$sql = "select * from table COLLATE utf8_bin like '%valeur %'"; ou valeur c'est une valeur que j'ai dans ma base mais toujours le même problème .
merci beaucoup
salut,
oh,c'est juste une erreur de frappe ,mon problème est que la requête s'exécute bien dans la php my admin mais lorsque je la mettre dans un script php j'ai rien comme résultats?
oh,c'est juste une erreur de frappe ,mon problème est que la requête s'exécute bien dans la php my admin mais lorsque je la mettre dans un script php j'ai rien comme résultats?
Nous basons nos analyses sur les éléments que tu fournis dans le forum. S'il y a une erreur dans le code que tu fournis sur le forum, nous n'avons aucune raison de deviner qu'elle n'est pas présente aussi dans ton PC.
Si tu as toujours ton problème, peux-tu montrer le code ? Un select, ce n'est pas la mer à boire...
Si tu as toujours ton problème, peux-tu montrer le code ? Un select, ce n'est pas la mer à boire...
J'ai fait mes essais avec le script suivant :
et ma table, très simpte :
Par rapport à toi :
je n'ai pas les lignes
Je n'ai pas relu la doc mysql pour voir le rôle exact de chacune, je me suis toujours contenté de 'SET NAMES UTF8', j'ai l'impression que les autres lignes font double emploi avec.
Mais ton gros problème, c'est ce $titre = utf8_decode($_GET["titre"]) ;
Ça veut dire quoi décoder l'utf8 ? Ça ré-encode ta chaîne en ISO8859-1. Si c'est ça le but, ce n'est pas la peine de travailler en utf8. Et comme tu t'es fatigué à expliquer à ta base de données que tu travaillais en utf8, et que finalement tu lui envoies de l'ISO8859-1, elle ne travaille pas correctement.
Mais le plus grave de tout, c'est que l'ISO8859-1 ne permet pas de coder les caractères arabes, il ne permet de coder que les caractères de l'Europe de l'ouest. Donc quand tu fais utf8_decode d'une chaine en arabe, tu n'as plus d'arabe après. Je ne sais pas ce que tu as d'ailleurs, mais certainement de l'arabe.
Retire tes fonction utf8_decode.
<?php $host = 'localhost'; $user = 'root'; $pass = '; $db = 'essai'; // connection à la DB $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); mysql_select_db($db) or die ('Erreur :'.mysql_error()); mysql_query('SET NAMES UTF8'); //titre: $titre = $_GET["titre"] ; //auteur: // $auteur = $_GET["auteur"] ; // $select_dep=$_GET["select_dep"]; $sql = "select * from these WHERE titre like '%$titre%'"; $result = mysql_query($sql,$link) or die ('Erreur : '.mysql_error() ); $total = mysql_num_rows($result); echo $total; // si on a récupéré un résultat on l'affiche. ?>
et ma table, très simpte :
CREATE TABLE 'these' ( 'auteur' text COLLATE utf8_bin NOT NULL, 'titre' text COLLATE utf8_bin NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Par rapport à toi :
je n'ai pas les lignes
mysql_query("SET CHARACTER SET 'utf8';",$cnx); mysql_query("SET COLLATE SET 'utf8_bin';",$cnx); mysql_query ("set character_set_client='utf8';",$cnx); mysql_query ("set character_set_results='utf8';",$cnx); mysql_query ("set collation_connection='utf8_bin';",$cnx);
Je n'ai pas relu la doc mysql pour voir le rôle exact de chacune, je me suis toujours contenté de 'SET NAMES UTF8', j'ai l'impression que les autres lignes font double emploi avec.
Mais ton gros problème, c'est ce $titre = utf8_decode($_GET["titre"]) ;
Ça veut dire quoi décoder l'utf8 ? Ça ré-encode ta chaîne en ISO8859-1. Si c'est ça le but, ce n'est pas la peine de travailler en utf8. Et comme tu t'es fatigué à expliquer à ta base de données que tu travaillais en utf8, et que finalement tu lui envoies de l'ISO8859-1, elle ne travaille pas correctement.
Mais le plus grave de tout, c'est que l'ISO8859-1 ne permet pas de coder les caractères arabes, il ne permet de coder que les caractères de l'Europe de l'ouest. Donc quand tu fais utf8_decode d'une chaine en arabe, tu n'as plus d'arabe après. Je ne sais pas ce que tu as d'ailleurs, mais certainement de l'arabe.
Retire tes fonction utf8_decode.
<?php $host = 'localhost'; $user = 'root'; $pass = ''; $db = 'these2'; // connection à la DB $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); mysql_select_db($db) or die ('Erreur :'.mysql_error()); //titre: $titre = $_GET["titre"] ; //auteur: $auteur = $_GET["auteur"] ; $select_dep=$_GET["select_dep"]; $sql = "select * from these COLLATE utf8_bin WHERE titre like '%$titre%'"; $result = mysql_query($sql,$link) or die ('Erreur : '.mysql_error() ); $total = mysql_num_rows($result); // si on a récupéré un résultat on l'affiche. ?>
oh monsieur le père ,enfin ça marche bien
je te remercie beaucoup ,j'étais bloquée avec ce problème ça fait plus que 20 jours ,et tellement j'ai entré dans les détails des détails que je suis perdue
le script de ma BASE st le suivant
je pense on problème est que j'ai oublié
merci pour d'avoir m'aider pour trouver le solution et pour votre patience
a la fin c'est résolu
merci encore une fois
je te remercie beaucoup ,j'étais bloquée avec ce problème ça fait plus que 20 jours ,et tellement j'ai entré dans les détails des détails que je suis perdue
le script de ma BASE st le suivant
CREATE TABLE 'these' ( 'id' int(10) NOT NULL auto_increment, 'titre' varchar(20) collate utf8_bin NOT NULL default '', 'auteur' varchar(20) collate utf8_bin NOT NULL default '', PRIMARY KEY ('id') ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ;
je pense on problème est que j'ai oublié
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />dans la page HTMl de recherche
merci pour d'avoir m'aider pour trouver le solution et pour votre patience
a la fin c'est résolu
merci encore une fois