Recherche sur plusieurs mots

Résolu
Bonjour,

J'essai de faire une recherche sur plusieurs mots de cette façon:

$txt_recherche=str_replace(" ","%",$txt_recherche);


cela m'affiche le texte saisi ex:

oranges%vertes pour oranges vertes

sans me retourner de résultat alors qu'il existe et que cela fonctionne avec un seul mot.

2 réponses

  1. Salut,

    Pour moi il n'y à rien d'anormal au fonctionnement de la fonction str_replace:
    Ici : str_replace(" ","%",$txt_recherche);

    Le premier paramètre (" ") :est l'élément à chercher
    Le 2d ("%") : l'élément de remplacement
    3e la chaine dans laquelle s'exécute la recherche.

    Du coup avec "oranges vertes" => il cherche l'espace le remplace par % est retourne la chaine.
    Résolu? ===> [RESOLU]
    0
    1. Peux-tu expliquer précisément ce que tu veux faire ?

      Je en comprend pas le lien entre le fait de vouloir faire une recherche et l'utilisation d'un str_replace
      0
      1. En fait je souhaite remplacer l'espace par % qui dans ma requête supprimerait les espace

        SELECT recettes.recettes_id, recettes.recettes_titre, recettes.recettes_ingredients, recettes.recettes_preparation, recettes.recettes_conclusion, recettes.recettes_date FROM recettes WHERE recettes.recettes_titre LIKE %s OR recettes.recettes_ingredients LIKE %s OR recettes.recettes_preparation LIKE %s OR recettes.recettes_conclusion LIKE %s ORDER BY recettes.recettes_date DESC
        0
      2. Contributeur
        Salut barale61,

        en supposant :

        - que cette chaîne est utilisée dans le code Php par printf ou plutôt sprintf
        - et que %s est, par conséquent le spécificateur de format où s'insère la chaîne composée de deux mots dont tu parles
        - et que cette chaîne est insérée dans une requête SQL utilisée pour ta recherche
        - et que tu utilises mysql

        il faut que tes LIKE %s soient réécrits en LIKE '%s'

        préalablement, il faudra t'assurer que ce qui est entré par l'utilisateur est échappé, pour éviter les petits malins (avec mysql : https://www.php.net/manual/fr/function.mysql-real-escape-string.php ou http://www.php.net/manual/fr/mysqli.real-escape-string.php).

        note que je ne vois pas l'intérêt de mettre un "%" à la place de l'espace, sauf si tu veux qu'en tapant "oranges vertes" on donne aussi un résultat "oranges bleues et pommes vertes"

        Si j'étais toi, je n'utiliserai pas de str_replace.

        Dal
        0
      3. Encore un poil plus d'explications serait bien, là ça fait beaucoup de supposition.

        Et en passant mysql_real_escape_string n'est pas une très bonne solution, mieux vaut utiliser l'extension PDO (et ensuite soit des bindValue()/bindParam(), soit un quote())
        0
      4. Contributeur
        je te l'accorde, c'est plus de l'induction que de la déduction (et pour mysql je l'ai jouée "boule de cristal" :-P)

        ma réponse est aussi une façon de dire à notre ami barale61 qu'il nous fait des cachoteries en nous cachant plein de choses qui rendent sa question initiale incompréhensible.

        pour PDO, c'est par souci de faire un code plus portable que le préfères à mysqli.real-escape-string que j'indiquais aussi dans mon message ? Il faudrait alors préciser à notre ami que PDO->quote va ajouter les quotes autour du contenu échappé, et que dans ce cas, il n'a pas à les ajouter à sa requête.

        mais ce sont encore des suppositions, donc laissons barale61 s'exprimer :-)

        Dal
        0
      5. Ok merci.
        0