Recherche avec like et collate UTF8 php
Résolu/Fermé
djanahana
Messages postés
82
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
6 avril 2015
-
5 juin 2012 à 16:14
Utilisateur anonyme - 18 juin 2012 à 10:50
Utilisateur anonyme - 18 juin 2012 à 10:50
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
- Easy php - Télécharger - Divers Web & Internet
- Recherche et remplacer word - Guide
- Recherche adresse - Guide
13 réponses
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
5 juin 2012 à 18:37
5 juin 2012 à 18:37
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
Utilisateur anonyme
14 juin 2012 à 17:20
14 juin 2012 à 17:20
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.
Utilisateur anonyme
Modifié par le père. le 14/06/2012 à 22:11
Modifié par le père. le 14/06/2012 à 22:11
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 ?
Utilisateur anonyme
16 juin 2012 à 10:29
16 juin 2012 à 10:29
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)
djanahana
Messages postés
82
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
6 avril 2015
13
17 juin 2012 à 10:49
17 juin 2012 à 10:49
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
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
5 juin 2012 à 16:18
5 juin 2012 à 16:18
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+
djanahana
Messages postés
82
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
6 avril 2015
13
5 juin 2012 à 18:08
5 juin 2012 à 18:08
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?
Utilisateur anonyme
15 juin 2012 à 10:38
15 juin 2012 à 10:38
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...
Utilisateur anonyme
17 juin 2012 à 19:20
17 juin 2012 à 19:20
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.
djanahana
Messages postés
82
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
6 avril 2015
13
14 juin 2012 à 13:01
14 juin 2012 à 13:01
mais c'est de la langue arab ,vraiment j'ai pas compris!!!
<?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
djanahana
Messages postés
82
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
6 avril 2015
13
18 juin 2012 à 10:11
18 juin 2012 à 10:11
j'avais un message d'erreur dans cette fonction ,c'est pour cela j'ai la supprimer;merci monsieur le pere