Mysql_query LIKE

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?



--
Bats-toi avec les meilleurs..
.. et crèves avec les autres

9 réponses

  1. 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
    1. 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
      1. $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
        1. 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
          1. 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
            1. 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
              1. Y'a mieux que LIKE...

                Y'a MATCH !
                0
                1. 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