IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Moteur de recherche et plusieurs mots clés


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 20
    Points
    20
    Par défaut Moteur de recherche et plusieurs mots clés
    Bonjour,

    j'ai adapté un mini moteur de recherche sur mon site afin de rechercher des chroniques qui sont sur le site en fonction du nom du groupe et des albums.

    Le problème, c'est que lorsque je tappe un mot clé composé du genre père nöel, il va me rechercher tous les groupes qui ont et le mot père et le mot noel dans leur nom de groupe/album.
    Or je voudrais qu'il me renvoi que les noms de groupes / albums qui ont "pere noel" dans leur nom.


    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php 
    if ($recherche=="" or $recherche==" ") { 
    echo"Vous n'avez pas entré de mot clé." ; } 
    else { 
    $recherche = $_POST['recherche']; 
    // on passe les mots recherchés en minuscules 
    $recherche = strtolower($recherche); 
    $operateur="or" ; 
    // on remplace les ' + , : par des espaces 
    $mots = str_replace('+', ' ', trim($recherche)); 
    $mots = str_replace('\'', ' ', $mots); 
    $mots = str_replace(',', ' ', $mots); 
    $mots = str_replace(':', ' ', $mots); 
    // on place les differents mots dans un tableau 
    $tab = explode(' ' , $mots); 
    //on compte le nbr d'élément du tableau. 
    $nb = count($tab); 
     
     
    //on prépare la requête SQL. 
    $sq1 = "select * from chronique where "; 
    $sq1 .= "groupe like '%$tab[0]%' or album like '%$tab[0]%'"; 
    for($i=1 ; $i<$nb; $i++)
    { 
    if($tab[$i]!="" && strlen($tab[$i])>2) //ne pas prendre un mot vide
    {
    // on boucle pour integrer tous les mots dans la requête
     
    $sq1.="or groupe like '%$tab[$i]%' or album like '%$tab[$i]%' "; 
    }
    }
     
     
     
     
    // on execute la requête SQL. 
    $result = mysql_db_query('soulknot2',$sq1); 
    if ($result) { 
    if (mysql_num_rows($result) == 0) { 
    // Si il n'y a pas de résultats 
    echo "<center><b>Pas de Résultat</b></center><br>"; 
    } else { 
    echo "<center><b>Résultat(s)</b></center><br>"; 
    while($row = mysql_fetch_array($result)) { 
    echo $row['album']; 
    echo"<BR>" ; 
    } 
    mysql_free_result($result); 
    } 
    } 
    } 
    ?>
    Pouvez-vous m'aider ? Merci d'avance

  2. #2
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    bonjour,

    tu fait un explode comme cela dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab = explode(' ' , $mots);
    , or "pere noel" as un espace donc ton $tab[0] correspond a "pere". Ensuite tu fais ta requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sq1 .= "groupe like '%$tab[0]%' or album like '%$tab[0]%'";
    et donc on recherche tous les groupes ou les albums commencant par "pere"

    EDIT
    desole je n'avais pas vu la boucle en dessous tu fais des recherche sur $tab[$i] qui correspond a une recherche sur "pere" et une sur "noel"
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup pour ta rapidité mes ces deux lignes sont déjà dans mon code

    edit :
    en fait, j'ai trouvé ... Mon problème venait d'un "or" alors qu'il fallait un "and"

    Mais j'ai encore quelques problèmes avec le nom de l'album:s

  4. #4
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    j'ai edite mon post carleprobleme se situe dans ta boucle au dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for($i=1 ; $i<$nb; $i++)
    {
    if($tab[$i]!="" && strlen($tab[$i])>2) //ne pas prendre un mot vide
    {
    // on boucle pour integrer tous les mots dans la requête
     
    $sq1.="or groupe like '%$tab[$i]%' or album like '%$tab[$i]%' ";
    }
    }
    car vu ton explode tu recherche sur "pere" et "noel"
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    enfin de compte, ce n'est pas du tout réglé :s
    so ? que puis-je faire pour modifier cette erreur ?

  6. #6
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    ne fais pas d'explode() pour ne pas rentrer dans la boucle et chercher vraiment "pere noel"
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    ne fais pas d'explode() pour ne pas rentrer dans la boucle et chercher vraiment "pere noel"
    Avec ca il ne trouvera que ce qui contient exactement "pere noel". "peres noel", "pere le soir de noel" ... seront oubliés par la recherche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $sq1 = "select * from chronique where groupe like "; 
    for($i=0 ; $i<$nb; $i++) 
    { 
       if($tab[$i]!="" && strlen($tab[$i])>2) { 
          $sq1.='%$tab[$i]% '; 
       } 
    } 
    $sq1.="or album like "; 
    for($i=0 ; $i<$nb; $i++) 
    { 
       if($tab[$i]!="" && strlen($tab[$i])>2) { 
          $sq1.='%$tab[$i]% '; 
       } 
    }
    Ca devrait te permettre d obtenir tous les champs ou pere ET noel son presents dans la meme colonne et pere se trouve avant noel.
    Il y a encore des ameliorations a apporter mais je crois que ca se rapproche plus d un moteur de recherche.
    [/code]

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Merci bien, par contre, ça ne m'affiche rien du tout quelque soit ma recherche !

    J'ai appliqué l'idée de yiannis et ça marche

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Ca m apprendra a ecrire sans tester.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for($i=0 ; $i<$nb; $i++) 
    { 
       if($tab[$i]!="" && strlen($tab[$i])>2) { 
          $sq1.='%'.$tab[$i].'% '; 
       } 
    } 
    $sq1.="or album like "; 
    for($i=0 ; $i<$nb; $i++) 
    { 
       if($tab[$i]!="" && strlen($tab[$i])>2) { 
          $sq1.='%'.$tab[$i].'% '; 
       } 
    }
    Ca devrait fonctionner mieux comme ca.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Thx

    J'avais une dernière question, comment faire pour supprimer tous les espaces au début d'une recherche ?
    car si je tape " motclé" ça me renverra bien moins de réponse que si je tape "motclé"

    JE suppose que ça doit être un str_delete(' ',
    mais je ne sais pas trop comment l'utilisé

  11. #11
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    trim
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par siddh
    trim
    Oui mais c'est en visual-basic ca ?

  13. #13
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par siddh
    merci bien, je pensais que c'était uniquement pr vb, c'est pour ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. moteur de recherche avec plusieurs mots clés
    Par kadiato dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 17/02/2009, 15h44
  2. [MySQL] Recherche sur plusieurs mots clés
    Par loupsolitaire dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/10/2008, 17h48
  3. [MySQL] Moteur de recherche : surligner les mots clés
    Par lagratteCchouette dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/01/2008, 18h15
  4. Recherche sur plusieurs mots-clés
    Par Freedolphin dans le forum Installation
    Réponses: 3
    Dernier message: 10/12/2007, 02h11
  5. Réponses: 6
    Dernier message: 04/11/2005, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo