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 :

Recherche avec un mot clé contenant les accents [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut Recherche avec un mot clé contenant les accents
    Bonjour,

    SVP tout est OK dans l'affichage de mes textes, tout marche normalement. Mais lorsque j'effectue une recherche dans mon formulaire avec un mot clé ayant des accents, rien ne s'affiche, pourtant le mot clé existe bien dans la table dans plusieurs occurrences.

    Dans ma table, mon champ est de type TEXT et l'interclassement est à latin1_general_ci .

    Je voudrais préciser que avec le type VARCHAR ça marche parfaitement, mais lorsque je dois utiliser un type pour les gros textes, il faut passer à autre chose et je ne peux pas utilisé BLOB par ce qu'il est sensible à la casse, je ne peux que utiliser TEXT ou LONGTEXT mais aucun ne gère les accents comme je veux.

    Quelqu'un a t-il une idée ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 327
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 327
    Billets dans le blog
    17
    Par défaut
    Quelqu'un a t-il une idée ?
    Probablement une divergence de charset.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Peut-être, mais pourquoi seulement sur les champs BLOB , TEXT et LONGTEXT, pourquoi ça marche partout ailleurs ?

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 327
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 327
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par mesken Voir le message
    Peut-être, mais pourquoi seulement sur les champs BLOB , TEXT et LONGTEXT, pourquoi ça marche partout ailleurs ?
    Peut-être parce qu'avec MySQL on peut donner un charset différent à chaque champ. Tu peux vérifier ça sous phpMyAdmin.
    Eventuellement donne-nous un court dump de ta BdD et un petit script PHP à tester.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    OK, dans ma base de données, j'ai une table simple avec trois champs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `nbase_bd`.`lexique` (
    `Num` INT( 9 ) NOT NULL AUTO_INCREMENT ,
    `Mot` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL ,
    `Explication` TEXT CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL ,
    PRIMARY KEY ( `Num` ) 
    ) ENGINE = InnoDB
    J'insère deux occurrences, pour le champ Explication, j'abrège le texte... pour vous épargner de trop de textes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO `lexique` (`Num`, `Mot`, `Explication`)VALUES (NULL , 'éventail', 'L'éventail est un accessoire de mode et de confort dont la principale...')
     
    INSERT INTO `lexique` (`Num`, `Mot`, `Explication`)VALUES (NULL , 'économie', '...Cependant, le mot est polysémique. L’économie est le concept étudié par les sciences économiques...')
    Et sur mon formulaire PHP, j'ai une zone de texte sur laquelle on tape la recherche du mot et on a l'explication venant du lexique, selon le bout de code suivant :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <form id="form1" name="form1" method="post" action="">
    <table width="577" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="282">&nbsp;</td>
        <td width="180">
            <input type="text" name="Recherche" id="Recherche" size="30"/>
        </td>
        <td width="12">&nbsp;</td>
        <td width="103"><input type="submit" name="button" id="button6" value="Rechercher" /></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td colspan="2">
     
        <?php
     
    //Récupération de la valeur de la zone de texte et paramétrage pour récupérer tout contient ce que l'on saisi
     	 $Rechercher=$_REQUEST["Rechercher"];  
    	 $Rech='%'.$Rechercher.'%';
     
    //Sélection dans la BD
    	 $query="SELECT * FROM lexique WHERE Mot LIKE '$Rech' OR Explication LIKE '$Rech'";
    	 $resultat=mysql_query($query);
     
    //Parcourt du résultat et affichage
      if ($resultat){
    	while($ligne=mysql_fetch_array($resultat)){
    		$Mot=$ligne['Mot'];
    		$Explication=$ligne['Explication'];
    		$DefinitionFr=$ligne['val6'];
     
    //Suppression des slash qui ont été ajoutés à l'enregistrement pour gérer les simples cotes
    		$Mot=stripslashes($Mot);
    		$Explication=stripslashes($Explication);
     
    //Affichage du résultat proprement dit
    		echo '<font face="Verdana" size="2" color="#006498" ><strong>'.$Mot.'</strong></font><br>';
     
    		echo '<font face="Arial" size="2" color="#000000" >'.$Explication.'</font></a>';
    		echo '<br><br>';
     
    	}
    }
     
     
    	?>
     
        </td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
    </table>
     </form>

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    pourquoi tu travailles pas en utf-8 ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] recherche avec plusieurs mots clé
    Par RAtiche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/05/2008, 17h03
  2. recherche avec plusieurs mots-clé
    Par MAMANHOU dans le forum IHM
    Réponses: 6
    Dernier message: 12/07/2007, 10h05
  3. Réponses: 4
    Dernier message: 01/03/2006, 13h58
  4. Réponses: 6
    Dernier message: 04/11/2005, 17h09
  5. Réponses: 3
    Dernier message: 25/07/2005, 18h41

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