Moteur de recherche.

Eléphanteau du PHP | 34 Messages

17 oct. 2009, 22:21

Bonsoir,

j'ai un léger soucis

Voila mon formulaire:

Code : Tout sélectionner

<form action="search.php" method="Post"> <input type="text" name="requete" size="10"> <input type="submit" value="Ok"> </form>

ma requete (fichier search.php):

Code : Tout sélectionner

nom="$query = mysql_query("SELECT * FROM infos_tbl WHERE nom OR prenom LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error());">

et l'affichage des résultats:

Code : Tout sélectionner

<?php echo htmlentities(trim($donnees['prenom'])); ?> <?php echo htmlentities(trim($donnees['nom'])); ?>
Le problème:
Imaginons une personne s'appellant robert machin.
Si je recherche machin,
Si je recherche robert, il me le trouve
Si je recherche robert machin, pas de résultats.

Le soucis vient de ma requete mais je ne sais pas comment faire.


Une idée ?

ViPHP
fab
ViPHP | 2657 Messages

18 oct. 2009, 03:15

Alors si tu veux chercher dans les deux champs en m^me temps tu peux essayer d'utiliser CONCAT() et fait un LIKE sur le CONCAT() :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 34 Messages

18 oct. 2009, 05:12

Re,

bon je regarderais ca plus précisemment demain vu que je suis fatigué la.

En faisant ceci;
$query = mysql_query("SELECT * FROM infos_tbl WHERE nom LIKE '%".$requete."%' OR prenom LIKE '%".$requete."%' OR CONCAT(prenom, nom)  LIKE '%".$requete."%'  ORDER BY id DESC") or die (mysql_error());
ca ne fonctionne pas :)

et en faisant ca:
$query = mysql_query("SELECT * FROM infos_tbl WHERE nom LIKE '%".$requete."%' OR prenom LIKE '%".$requete."%' OR CONCAT( prenom, '', nom)  LIKE '%".$requete."%'  ORDER BY id DESC") or die (mysql_error()); 
Il arrive à me trouver si et seulement si j'accroche le nom et le prenom (dans mon exemple: robertmachin, il me le trouve)

ViPHP
ViPHP | 1136 Messages

18 oct. 2009, 08:27

Je serais toi , je ferais une recherche en utilisant FULLTEXT ( donc MATCH ) qui te simplifiera la vie , et sera plus performant et précis que LIKE .

Sinon, pour like , il faut que tu découpes ta chaine pour avoir une liste de mots , et pour chaque mot concaténer ta requête avec un OR LIKE %tonmot%

good luck ,
Ch.

Eléphanteau du PHP | 34 Messages

19 oct. 2009, 23:42

Slt,

j'y arrive pas. Tant pis je vais essayer de chercher un script qui me conviendra.

J'espère en trouver.

Merci

renaud Garnier
Invité n'ayant pas de compte PHPfrance

28 févr. 2011, 23:05

Je viens d'avoir le même problème...
ton code ne fonctionne pas

Code : Tout sélectionner

$query = mysql_query("SELECT * FROM infos_tbl WHERE nom LIKE '%".$requete."%' OR prenom LIKE '%".$requete."%' OR CONCAT( prenom, '', nom) LIKE '%".$requete."%' ORDER BY id DESC") OR die (mysql_error());
car il manque l'espace dans le concat... comme ceci tu peux chercher avec un espace :

Code : Tout sélectionner

$query = mysql_query("SELECT * FROM infos_tbl WHERE nom LIKE '%".$requete."%' OR prenom LIKE '%".$requete."%' OR CONCAT( prenom, ' ', nom) LIKE '%".$requete."%' ORDER BY id DESC") OR die (mysql_error());

moi
Invité n'ayant pas de compte PHPfrance

08 mars 2011, 17:01

Je ne m'y connais pas en SQL mais si tu concatènes alors tu obliges l'utilisateur à formater sa chaîne de caractère d'une certaine manière or tu ne peux pas tout imaginer !
Si'l tape "nom prenom", ce n'est pas la même chose que "prenom nom" ou "nomprenom" ou encore "nom prenom" (avec 3 espaces)

D'après moi, il doit y avoir un moyen en php de casser ta chaîne puis de comparer les moceaux, comme tu l'as fait à $nom et $prenom mais là je ne suis pas du tout caler dessus