Discussion:
Formulaire de recherche - Besoin d'aide
(trop ancien pour répondre)
bobino75
2009-06-03 21:13:37 UTC
Permalink
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.
Olivier Miakinen
2009-06-03 22:12:46 UTC
Permalink
Bonjour,
Post by bobino75
- 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.
Post by bobino75
- 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
Michael DENIS
2009-06-04 05:50:21 UTC
Permalink
Post by bobino75
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
Post by bobino75
- 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
Michael DENIS
2009-06-04 05:50:21 UTC
Permalink
Post by bobino75
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
Post by bobino75
- 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
Continuer la lecture sur narkive:
Loading...