Probleme de case dans un moteur de recherche.

Gizmalin Messages postés 3 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 15 avril 2008 - 14 avril 2008 à 16:49
Gizmalin Messages postés 3 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 15 avril 2008 - 15 avril 2008 à 15:26
Bonjour .
Apres quelques recherche non fructueuse sur le forum ,j'ai decidé de demander .( bon apres si j'ai raté la reponse dans le forum excusez moi en ;) )
Je suis en train de faire un moteur de recherche pour un site  ( recherche simple ) juste des mots cléfs dans different champs, mais comme beaucoup (impression ) je galere avec la Case.

Alors un peu de code ;)

if(!empty ($_POST['txt_search'])){
//verification de la base
$search=$_POST['txt_search'];

// On selectionne les enregistrements contenant le mot clé
// dans les keywords ou le titre
    $query = "SELECT *
FROM `publish`
WHERE `categorie`='".$cate."' AND `title` LIKE '%$search%'
OR `categorie`='".$cate."' AND `keywords` LIKE '%$search%'
OR `categorie`='".$cate."' AND `comment` LIKE '%$search%'";
    $result = mysql_query($query);
    $row = mysql_num_rows($result);
    $Nombre = $row;

// Si aucun enregistrement n'est retourné,
// on affiche un message adéquat
if ($Nombre == "0") {
    echo ("
Aucun résultat ne correspond à votre recherche
" );

}else {
    $query = "SELECT *
FROM `publish`
WHERE `categorie`='".$cate."' AND `title` LIKE '%$search%'
OR `categorie`='".$cate."' AND `keywords` LIKE '%$search%'
OR `categorie`='".$cate."' AND `comment` LIKE '%$search%'";
    $result = mysql_query($query);
    $row = mysql_num_rows($result);
    $Nombre = $row;

    // Si un seul enregistrement est trouvé, on affiche un message au singulier
    if ($Nombre == "1") {
    echo ("Un article trouvé

");
   
    // Dans le cas contraire le message est au pluriel...
    }else {
    echo ("Résultat: $Nombre articles trouvés

");
    };
..................

Voila donc le probleme est donc le suivant arrivé a ce que si l'utilisateur recherche  :"article" qu'il trouve dans la base autant les mots "Article" que "article".

En vous remerciant tous d'avance.
Cordialement un NB dans le besoin ;)

6 réponses

Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
14 avril 2008 à 18:32
Salut,

Il me semble que MYSQL gère la casse. M'enfin si ça ne fonctionne pas utilise les fonctions strtolower de PHP et LOWER de MYSQL.
En gros dans ta requête tu utilises LOWER pour chaque champ et en PHP tu utilises strtolower pour chaque variable.

Bonne chance,
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 avril 2008 à 19:04
Salut,

Les champs de  type TEXT ne sont pas sensibles à la casse, contrairement aux champs de type BLOB.
Lire la doc pour plus de détails : http://dev.mysql.com/doc/refman/5.0/fr/blob.html
<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 1
14 avril 2008 à 22:46
Hello,

Moi je te fait juste quelques remarques sur ton code au passage.

    $row = mysql_num_rows($result);
    $Nombre = $row;

// Si aucun enregistrement n'est retourné,
// on affiche un message adéquat
if ($Nombre == "0") {

Euh non pourquoi réassigner deux fois la valeur de numrows ? En passant il retourne un ENTIER par une chaine alors pourquoi == "0"
psst: if (($Nombre mysql_num_rows($result)) 0) {

Aussi échape ta valeur, parce que la l'injection est possible (enfin pourquoi personne y pense jamais ). Sinon un champ text ou varchar est insensible à la casse, a moin que tu compare avec LIKE BINARY

Je te laisse un deuxième lien de doc qui parle exactement de ton problème : http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0
Gizmalin Messages postés 3 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 15 avril 2008
15 avril 2008 à 14:54
Je vous remercie tous , je vais me re-pencher sur le probleme a la lumiere de ces nouvelles informations.

heureusement que vous etes la quand meme ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 avril 2008 à 15:25
Jette aussi un oeil à la réponse de Malalam dans ce sujet : http://www.phpcs.com/infomsg_SENSIBILITE-CASSE_1112375.aspx

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
Gizmalin Messages postés 3 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 15 avril 2008
15 avril 2008 à 15:26
Bon je n'arrive pas a edité mon post precedent , donc je vais le doublé pour dire encor une fois merci a tout le monde et donné la solution de tout ce mik mak .

j'ai raisolu le probleme qui etait tout simplement l'interclassement de ma table    utf8_bin qui comme son nom l'indique (ou pas  ) est binaire et donc sensible a la case meme sur des champs de type texte ;) c est Yoman 64 qui ma mis sur la voie avec le compare LIKE BINARY Donc  voila maintenant sa marche comme ca devrais .

A bientot tout le monde encor merci probleme resolue ;)
0