script pour faire un moteur de recherche

Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013
- - Dernière réponse : aminagu
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013
- 25 juil. 2011 à 18:44
bjr tout le monde
j etais entrain de chercher d un code source pour faire un moteur de recherche et j ai compris le principe mais j arrive pas a comprendre les lignes suivantes :


$mots = explode(' ',$rec);//En separre lexpression en mots cles
foreach($mots as $mot)
{
$req .= ' infos LIKE "%'.$mot.'%" OR';// sutout cette ligne;:(
}
$req .= ' 1=0';// et celle la :(
merci d avance :)
Afficher la suite 

6 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
Bonjour,

$req .= ' infos LIKE "%'.$mot.'%" OR'; est un racourcis pour $req=$req.' infos LIKE "%'.$mot.'%" OR';

Pour ce qui est de la requete, le LIKE signifie qui est a peu pres égal et les % banalisent plusieurs caractères.

WHERE infos LIKE "%mot%" signifie ou infos ressemble à "des caractères puis mot puis des autres caractères.

Par exemple aaamotaaa sera conservé.

Je ne sais pas si je suis très clair...
Commenter la réponse de cs_Julien39
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
8
0
Merci
bonjour

quand tu saisies des mots dans le champs de recherche généralement il sont séparés par un espace donc tu éclates la chaîne envoyé par les espaces

ex tu as tapé : musique classique guitare

ta chaîne va être stocké dans un tableau $mots
la fonction explode se charge du travail

puis chaque éléments du tableau serait concaténer dans une chaîne $req
les espaces seront alors des 'or' qui pourront permettre la recherche dans la base

' infos LIKE "%musique%" OR infos LIKE "%classique%" OR infos LIKE "%guitare%"





Bonne programmation !
Commenter la réponse de cod57
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013
0
Merci
et pour cette ligne ?
$req .= ' 1=0'

mercii beaucoup ;
Commenter la réponse de aminagu
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Salut,

Le mieux pour bien comprendre et de faire un echo de la string (la requête) générée

foreach($mots as $mot) {
$req .= ' infos LIKE "%'.$mot.'%" OR';// sutout cette ligne;:(
}

A ce point du script tu te retrouves avec une chaîne du genre:
$req = '[patati patata WHERE] infos LIKE "%machin%" OR "bidule" OR
Tu vois bien que cette requête n'est pas valide (le dernier OR suivi de rien)

On pourrait très bien supprimer ce dernier OR de différentes manières, mais l'auteur du script à décider de rendre la requête valide en ajoutant ça :
$req .= ' 1=0';

$req ressemble donc à :
$req = '[patati patata WHERE] infos LIKE "%machin%" OR "bidule" OR 1=0

Ce qui est valide; 1=0 ne serait simplement jamais vrai.

C'est selon moi une méthode à éviter, ... mais pourquoi pas


Cordialement,

Kohntark -
Commenter la réponse de kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
NB : j'ai oublié les % autour de bidule


Kohntark -
Commenter la réponse de kohntark
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013
0
Merci
mercii infiniment :)
Commenter la réponse de aminagu