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

Requêtes MySQL Discussion :

recherche en texte libre dans des champs codés html


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut recherche en texte libre dans des champs codés html
    Bonjour,

    J'ai une BD dont les champs de texte sont codés html avec la fonction htmlentities () de PHP.

    Pour une recherche en texte libre, les requêtes avec un caractère accentué ne trouvent rien, ce qui paraît normal.

    "étonnant" ne trouve pas "étonnant"

    Si je code le texte de la recherche en html, Mysql me balance maintenant toutes les fiches où figure le caractère accentué, comme si celui-ci n'était pas lié en reste du texte.

    Par exemple, une recherche avec :

    étonnant

    trouve toutes les occurences de é !!!

    Connaissez-vous ce problème et existe-t-il une solution.

    MERCI d'avance.

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Bonjour,

    Peux-tu nous donner un exemple précis de requête SQL qui ne marche pas ?
    Pensez au bouton

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    MERCI de ton intérêt.

    $champ = la liste des champs de recherche, séparés par des virgules.
    $text = l'expression à chercher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete = "SELECT DISTINCT cabcab.ca_id, cate, IF(MID(prix,1,1)='L','L','P') AS prix FROM cabcab WHERE MATCH($champ) AGAINST('$text' IN BOOLEAN MODE)";

  4. #4
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    A mon sens, c'est normal. Le MATCH renvoit une sorte de coefficent de correspondance. Dans ton cas, il renvoit peut-être 0,0232424, ce qui est différent de 0.

    En effet, MySQL n'est pas informé qu'il s'agit de html encrypté. Il prend les ponctuation pour une délimitation de mot je pense.

    Pour s'en convaincre, il faudrait voir ce qui se passe quand l'on affiche le résultat du MATCH.
    Pensez au tag

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse.

    Mysql a-t-il besoin de savoir que le texte est codé html ?

    Dans mon essai, j'ai codé html le texte de la requête, et c'est là où ça foire, car par exemple il va me retourner toutes les occurences de é si je cherche étonnant.

    J'ai construit ma requête avec un gros bouquin sur Mysql de Campus Press qui ne vaut pas grand chose.

    Je pense que ce problème est très commun, de nombreuses BD sont codées html, il doit exister une solution, je vais aller voir la doc en ligne de Mysql, si vous avez d'autres idées ou adresses à me recommander, encore MERCI.

  6. #6
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par boteha
    de nombreuses BD sont codées html
    A mon sens c'est un mauvais choix de stocker des caractères HTML dans une base. Imagine que tu veuilles exploiter les données ailleurs que dans un environnement Web : tu seras obliger de faire des contorsions pour les extraire dans un format compréhensible.
    Ca pose aussi des problèmes au niveau des recherches comme tu as pu t'en apercevoir.

    En revanche, faire un htmlentities() à l'extraction avant d'afficher les données me parait une solution beaucoup plus viable.

    En ce qui concerne la recherche fulltext, je te conseille ce tutoriel : http://omiossec.developpez.com/mysql/fulltext/.
    Pensez au bouton

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    MERCI de ta réponse.

    Entre utiliser htmlentities () lors de l'affichage Web ou html_entities_decode () si tu dois exporter ta base vers un autre média, je pense que c'est kif-kif.

    Cependant, l'avantage de coder ton texte en html est :
    rapidité d'affichage, car je pense quand même que des successions de htmlentities () prennent un peu de temps.

    Pour la recherche en texte intégral, j'ai du mal à croire qu'il n'existe pas une solution, mais encore une fois MERCI.

  8. #8
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Et tu as absolument besoin de coder les caractères spéciaux (hors symboles > et <) en html ? Il me semble que la plupart des navigateurs les interprètent bien...
    Pensez au bouton

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Par hasard, ne serait-ce pas la structure de ma table qui serait mauvaise.
    Si quelqu'un peut y jeter un œil, MERCI.

    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
     
    CREATE TABLE `essai` (
      `ca` int(3) unsigned NOT NULL default '0',
      `tit` tinytext NOT NULL,
      `cat` set('A1','A2','A4','A5','A6','A7','A8','B1','B2','C1','C2','C3','D1','D2','D3','E1','E2','E3','F1','F2','G1','G2','G3','H1','I1','I2','I3','I4','I5','J1','J2','J3','J4','J5','J6','K1','K2','K3','K4','L1','L2','L3','L4','M1','N1','N2','N3','O1','O2','O3','O4','O5','P1','Q1','R1','S1','Z2') NOT NULL default 'R1',
      `eu` varchar(11) NOT NULL default '00',
      `ed` varchar(11) NOT NULL default '00',
      `himg` varchar(6) character set latin1 collate latin1_bin NOT NULL default '0',
      `descab` text NOT NULL,
      `carcab` text NOT NULL,
      `fab` varchar(20) NOT NULL default 'Belkin',
      `win` enum('O','N') NOT NULL default 'O',
      `mac` enum('O','N') NOT NULL default 'O',
      `pro` tinytext NOT NULL,
      `nou` enum('O','N') NOT NULL default 'N',
      `bro` varchar(255) NOT NULL default '',
      `prix` varchar(30) character set latin1 collate latin1_bin NOT NULL default '0',
      PRIMARY KEY  (`ca_id`),
      FULLTEXT KEY `carcab` (`carcab`),
      FULLTEXT KEY `descab` (`descab`),
      FULLTEXT KEY `titcab` (`titcab`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Et tu as absolument besoin de coder les caractères spéciaux (hors symboles > et <) en html ? Il me semble que la plupart des navigateurs les interprètent bien...
    Pour une validation XHTML strict, c'est indispensable.

    Par ailleurs, tu fais ça au niveau de l'administration, avec htmlentities () bien paramétré, c'est donc très simple à gérer.

    Et je t'assure que ça dépote ! Va jeter un œil à www.touslescables.com par exemple.

    J'ai viens de voir dans votre FAQ que le codage html n'est pas déconseillé.

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

Discussions similaires

  1. Importer un fichier texte dans des champs d'une table
    Par Cyriusix dans le forum Modélisation
    Réponses: 1
    Dernier message: 17/04/2008, 14h18
  2. récupération texte dans des champs ajouter au préalable
    Par Dodielapatate dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/08/2007, 14h11
  3. comment copier le texte dans des champs
    Par pierrot67 dans le forum Bases de données
    Réponses: 5
    Dernier message: 08/12/2006, 10h05
  4. Afficher les coordonnées d'un layer dans des champs texte
    Par renaud26 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 15/08/2006, 13h53
  5. [SQLite]éliminer un motif dans des champ TEXT
    Par Invité(e) dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2005, 17h44

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