Mysql_query LIKE

Utilisateur anonyme -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,

je fais mon moteur de recherche sur mon site

et j'ai un problême avec les LIKE de la requete mysql....

Voila mon script
_______________________________________________________________________

donc j'ai deux variable GET qui m'arrive direct depuis l'URl

$_GET['recherche'] = valeur entré par l'utilisateur
$_GET['rechercher'] = le bouton submit

<?php
if($_GET['rechercher'] == 'ok')
{
$recherche_separ = explode(' ', $_GET['recherche']);

$nb_recherche = count($recherche_separ);

$critere = ' LIKE "%'.$recherche_separ[0].'%"';

$nb_recherche = count($recherche_separ);
$z=1;
while($z<$nb_recherche)
{
$critere .=' OR LIKE "%'.$recherche_separ[$z].'%"';
$z++;
}
echo $critere;

$sql = 'SELECT * FROM news '.$critere.'';
$req = mysql_query($sql) or die (mysql_error());

echo '<h1>' . count($req) . ' résultat(s)</h1>';

while($data = mysql_fetch_array($req))
{
?>
<h1><?php echo $data['titre']; ?></h1>
<?php
}

}
else
{
echo '<p>Vous n\'avez pas précisez de critère de recherche!</p>';
}
________________________________________________________________________

voila et quand je fais mon script sa me fais sa

LIKE "%news%"Erreur de syntaxe près de 'LIKE "%news%"' à la ligne 1

j'ai regarder plusieur tuto sur le LIKE mysql mais ma sintaxe et juste :S

Pourriez vous m'aidez?


A voir également:

9 réponses

Alain_42 Messages postés 5413 Statut Membre 894
 
il te manque le WHERE et le nom du champ à comparer par LIKE

je t'ai mis nom_champ remplaces par celui qui te concerne

$critere = 'nom_champ LIKE "%'.$recherche_separ[0].'%"';

$nb_recherche = count($recherche_separ);//pourquoi tu mets 2 fois cette ligne ?
$z=1;
while($z<$nb_recherche)
{
$critere .=' OR nom_champ LIKE "%'.$recherche_separ[$z].'%"';
$z++;
}
echo $critere;

$sql = 'SELECT * FROM news WHERE '.$critere.'';
$req = mysql_query($sql) or die (mysql_error());
0
Utilisateur anonyme
 
je mets deux fois car je voudrais par exemple que . quand le mek tape [news point]

que sa me cherche dans une table tout les entrées qui ont news ou qui ont point....

donc je vais essayer avec WHERE mais si je voudrais que sa recherche sur tout les champs de ma table je devrais mettre quoi ?
0
Alain_42 Messages postés 5413 Statut Membre 894
 
$nb_recherche = count($recherche_separ);

te renvoie la taille de l'array $recherche_separ donc le nombre de mots tapés, ça ne sert à rien de mettre plusieurs fois la même fonction

tu peux mettre dix fois la ligne tu auras toujours $nb_recherche=2 dans ton cas

pour recherche sur plusieurs champs il faut

$critere = 'nom_champ1 LIKE "%'.$recherche_separ[0].'%" OR nom_champ2 LIKE "%'.$recherche_separ[0].'%" OR nom_champ3 LIKE "%'.$recherche_separ[0].'%"';

//et plus bas dans la boucle pareil
$critere .=' OR nom_champ1 LIKE "%'.$recherche_separ[$z].'%" OR OR nom_champ2 LIKE "%'.$recherche_separ[$z].'%" OR OR nom_champ3 LIKE "%'.$recherche_separ[$z].'%"';

0
Utilisateur anonyme
 
oui mais ma variable get et écrite avec un formulaire donc peut être que le mec va taper + de mot donc si il y en aurai 4 mot bain sa fera 4 like ??? non ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5413 Statut Membre 894
 
et bien si il tape 4 mots $nb_recherche = count($recherche_separ); va etre = 4

et ta boucle fera 3 pas (de 1 à <4) ce qui avec la première condition (celle qui est hors de la boucle) ça fait bien 4 LIKE
0
Utilisateur anonyme
 
Alain_42 j'ai essayer avec les Where et sa marche bien... mais si je voudrais que sa cher sur tout les champs de la table je pourrai mettre WHERE * ?
0
Alain_42 Messages postés 5413 Statut Membre 894
 
NON
0
lezao Messages postés 505 Statut Membre 36
 
Y'a mieux que LIKE...

Y'a MATCH !
0
Alain_42 Messages postés 5413 Statut Membre 894
 
effectivement je ne connaissait pas

avec MATCH ça permet de spécifier plusieurs champs de la table

il faut qu'il aiiles voir sur Google comment la mettre en oeuvre
0