Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formulaire de recherche - Besoin d'aide

2 réponses
Avatar
bobino75
Bonjour,

Je dois construire un formulaire de recherche et je rencontre quelques problèmes.

J'ai un formulaire de recherche avec 5 textbox pour les mots clés. La recherche se fait sur un champ d'une table mysql.

- Je cherche un moyen de trouver les enregistrements de la table contenant exactement les mots recherchés et non pas les mots contenant le ou les mots clés. Ex. si je recherche le mot "mal", je ne veux pas "maladie". J'avais dans mon code : WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé. Si j'ajoute des espace entre les %% et que la phrase commence ou termine par mon mot clé, le système ne le trouve pas.

- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit", "t'sais" mais avec la ligne : preg_match("#\b(".$frm_keywords.")\b#i", $ligne), le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des mots clés du formulaire avec des pipes ( | ) entre chaque mot.

Donc, si vous avez une idée ou des exemples pour pouvoir m'aider,¸j'apprécierais grandement.

Merci de votre aide.

2 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 03/06/2009 23:13, bobino75 a écrit :

- Je cherche un moyen de trouver les enregistrements de la table contenant
exactement les mots recherchés et non pas les mots contenant le ou les mots
clés. Ex. si je recherche le mot "mal", je ne veux pas "maladie". J'avais dans
mon code : WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé. Si j'ajoute
des espace entre les %% et que la phrase commence ou termine par mon mot clé, le
système ne le trouve pas.



Là c'est plutôt une question pour f.c.a.sgbd que pour f.c.l.php. Cela
dit, je ne connais rien à la syntaxe SQL, mais si la concaténation se
fait avec « + » tu peux essayer un truc du genre :
WHERE ' '+ligne+' ' LIKE '% $data %'

En d'autres termes, tu cherches ton mot entre deux espaces, dans un
champ que tu as lui-même augmenté de deux espaces, une au début et une
à la fin.

- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit",
"t'sais" mais avec la ligne : preg_match("#b(".$frm_keywords.")b#i", $ligne),
le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des
mots clés du formulaire avec des pipes ( | ) entre chaque mot.



J'ai une question idiote, pardonne-moi de la poser : tu es sûr que tu as
bien « p'tit » dans $frm_keywords et pas, par exemple, « p'tit » ?

Cordialement,
--
Olivier Miakinen
Avatar
Michael DENIS
bobino75 a écrit :
WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé.



Normal, le "%" est un joker qui remplace zéro ou plusieurs caractères.
Si vous voulez trouver un champ qui contient _uniquement_ "mal", il vous
faut :

WHERE ligne LIKE $data

- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit",
"t'sais" mais avec la ligne : preg_match("#b(".$frm_keywords.")b#i", $ligne),
le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des
mots clés du formulaire avec des pipes ( | ) entre chaque mot.



La réponse d'Olivier me parait une bonne orientation pour les recherches.

--
Michaël DENIS