script pour faire un moteur de recherche

Signaler
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013
-
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013
-
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 :)

6 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
286
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...
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
12
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 !
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013

et pour cette ligne ?
$req .= ' 1=0'

mercii beaucoup ;
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
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 -
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
NB : j'ai oublié les % autour de bidule


Kohntark -
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013

mercii infiniment :)