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 :

Script moteur de recherche


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut Script moteur de recherche
    Bonjour,
    Salut,

    J'aimerai adapter a mon site un script de moteur de recherche avec quelque amélioration.
    mes amélioration consiste a élevé la sélection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <select name="mode">
    <option value="expression_exacte">Expression exacte</option>
    <option value="un_mot">Au moins un mot</option>
    </select>
    est garder (au mois un mot) cette option doit resté par default
    voila le 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    <?php
    mysql_connect("localhost", "root", ""); //connexion à la bdd
    mysql_select_db("testsearch");
    if (isset($_POST['rechercher'])) //si on a validé le formulaire
    {
    $recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
    $mode = $un_mot
     
     
    if //si le mode de recherche n'est pas par expression exacte
    {
    $selection_recherche = mysql_query("SELECT * FROM mpiii WHERE titre LIKE '%$recherche%' ORDER BY id DESC");
    $mots = explode(" ", $recherche); //séparation des mots
    $nombre_mots = count ($mots); //compte le nombre de mots
    $valeur_requete = '';
    for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
    {
    $valeur_requete .= ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
    }
    $valeur_requete = ltrim($valeur_requete); //suppression de AND ou de OR au début de la boucle
    $selection_recherche = mysql_query("SELECT *
    FROM mpiii
    WHERE $valeur_requete ORDER BY id DESC"); //requête avec le résultat de la boucle dedans
    }
    else
    {
     echo'test'; 
    }
     
     
     
    $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
    if ($nombre_resultats == 0) //s'il n'y a pas de résultat
    {
    echo 'aucun resultat.<a href="recherche.php">recommencer</a>';
    }
    else //il y a au moins un résultat
    {
    echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
    while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
    {
    echo '<strong>Titre:</strong> ' . $resultats['titre'] . '<br />
    <strong>Date:</strong> ' . $resultats['date'] . '<br /><br />';
    }
    echo '<a href="recherche.php">recommencer</a>';
    }
    }
    else //si on n'a pas validé le formulaire, on l'affiche
    {
    ?>
    <form method="post" action="recherche.php">
    Votre recherche :
    <input type="text" name="recherche" />
    <br />
     
    <input type="submit" value="Rechercher" name="rechercher" />
    </form>
    <?php
    }
    mysql_close(); //déconnexion de la bdd
    ?>
    si quelqu'un peu m'aidez ben qu'il n'hésite pas ^^'
    merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu veux "enlever" la selection plutôt non ?
    Si tu ne laisses qu'un seul choix, pourquoi garder la liste de choix ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    j'essaie de faire une recherche simple comme ceci



    j'ai enlevé (selection) mais a chaque fois je me plante :s

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Commence par retirer ton if sans condition.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    voila j'ai fais quelque modification est ca marche quand je cherche 1 seul mot si je met + j'ai l'erreur Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in localhost.... on line 27


    voila le code avec les modification
    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
    53
    54
    55
    56
    57
     
    <?php
    mysql_connect("localhost", "root", ""); //connexion à la bdd
    mysql_select_db("test");
    if (isset($_POST['rechercher'])) //si on a validé le formulaire
    {
    $recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
     
     
     //si le mode de recherche n'est pas par expression exacte
     
    $selection_recherche = mysql_query("SELECT * FROM mpiii WHERE titre LIKE '%$recherche%' ORDER BY id DESC");
    $mots = explode(" ", $recherche); //séparation des mots
    $nombre_mots = count ($mots); //compte le nombre de mots
    $valeur_requete = '';
    for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
    {
    $valeur_requete .= ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
    }
    $valeur_requete = ltrim($valeur_requete); //suppression de AND ou de OR au début de la boucle
    $selection_recherche = mysql_query("SELECT *
    FROM mpiii
    WHERE $valeur_requete ORDER BY id DESC"); //requête avec le résultat de la boucle dedans
     
     
     
     
    $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
    if ($nombre_resultats == 0) //s'il n'y a pas de résultat
    {
    echo 'aucun resultat.<a href="recherche.php">recommencer</a>';
    }
    else //il y a au moins un résultat
    {
    echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
    while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
    {
    echo '<strong>Titre:</strong> ' . $resultats['titre'] . '<br />
    <strong>Date:</strong> ' . $resultats['date'] . '<br /><br />';
    }
    echo '<a href="recherche.php">recommencer</a>';
    }
    }
    else //si on n'a pas validé le formulaire, on l'affiche
    {
    ?>
    <form method="post" action="recherche.php">
    Votre recherche :
    <input type="text" name="recherche" />
    <br />
     
    <input type="submit" value="Rechercher" name="rechercher" />
    </form>
    <?php
    }
    mysql_close(); //déconnexion de la bdd
    ?>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il n'y a pas les AND dans ta requete.

    Plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $mots = explode(" ", $recherche); //séparation des mots
    $where = "";
     
    foreach($mots as $mot) {
       $conditions[] = " titre LIKE '%" . $mot . "'%"; 
    }
    if (is_array($conditions)) {
       $where = "WHERE " . implode('AND', $where);
    }
     
    $selection_recherche = mysql_query("SELECT * FROM mpiii " . $where  . "ORDER BY id DESC");
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    voila j'ai mis ton code mais ca ne fonctionne pas ca a donnée ca :s

    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
    53
    54
    55
    56
     
    <?php
    mysql_connect("localhost", "root", ""); //connexion à la bdd
    mysql_select_db("test");
    if (isset($_POST['rechercher'])) //si on a validé le formulaire
    {
    $recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
     
     
     //si le mode de recherche n'est pas par expression exacte
     
    $selection_recherche = mysql_query("SELECT * FROM movies WHERE titre LIKE '%$recherche%' ORDER BY id DESC");
    $mots = explode(" ", $recherche); //séparation des mots
    $where = "";
     
    foreach($mots as $mot) {
       $conditions[] = " titre LIKE '%" . $mot . "'%"; 
    }
    if (is_array($conditions)) {
       $where = "WHERE " . implode('AND', $where);
    }
     
    $selection_recherche = mysql_query("SELECT * FROM movies " . $where  . "ORDER BY id DESC");
     
     
     
    $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
    if ($nombre_resultats == 0) //s'il n'y a pas de résultat
    {
    echo 'aucun resultat.<a href="recherche.php">recommencer</a>';
    }
    else //il y a au moins un résultat
    {
    echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
    while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
    {
    echo '<strong>Titre:</strong> ' . $resultats['titre'] . '<br />
    <strong>Date:</strong> ' . $resultats['date'] . '<br /><br />';
    }
    echo '<a href="recherche.php">recommencer</a>';
    }
    }
    else //si on n'a pas validé le formulaire, on l'affiche
    {
    ?>
    <form method="post" action="recherche.php">
    Votre recherche :
    <input type="text" name="recherche" />
    <br />
     
    <input type="submit" value="Rechercher" name="rechercher" />
    </form>
    <?php
    }
    mysql_close(); //déconnexion de la bdd
    ?>
    est ce que t'aurai pas un tuto pour créer un moteur de recherche avec mot-clés ca fais 1 semaine que je cherche a chaque fois que je trouve il y a un problème avec le code :s
    ou sinon réparé celui la

    (merci pour les réponses)

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu pourrais être plus précis que "ça ne fonctionne pas" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    quand j'entre plusieurs mots il y a une erreur qui apparait

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in d:\program files\easyphp1-8\www\site\recherche.php on line 27
    aucun resultat.recommencer

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Affiche la requete, on y verra plus clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT * FROM movies " . $where  . "ORDER BY id DESC";
    echo $sql:
    $selection_recherche = mysql_query($sql);
    Au passage, la premiere requete ne sert a rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    voila le résultat final

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("test");
    if (isset($_POST['rechercher'])) //si on a validé le formulaire
    {
    $recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
     
     
     //si le mode de recherche n'est pas par expression exacte
     
    $selection_recherche = mysql_query("SELECT * FROM mpiii WHERE titre LIKE '%$recherche%' ORDER BY id DESC");
    $mots = explode(" ", $recherche); //séparation des mots
    $where = "";
     
    foreach($mots as $mot) {
       $conditions[] = " titre LIKE '%" . $mot . "'%"; 
    }
    if (is_array($conditions)) {
       $where = "WHERE " . implode('AND', $where);
    }
     
    $sql = "SELECT * FROM mpiii " . $where  . "ORDER BY id DESC";
     
    $selection_recherche = mysql_query($sql);
    echo $sql;
     
     
     
     
     
     
    $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
    if ($nombre_resultats == 0) //s'il n'y a pas de résultat
    {
    echo 'aucun resultat.<a href="recherche.php">recommencer</a>';
    }
    else //il y a au moins un résultat
    {
    echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
    while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
    {
    echo '<strong>Titre:</strong> ' . $resultats['titre'] . '<br />
    <strong>Date:</strong> ' . $resultats['date'] . '<br /><br />';
    }
    echo '<a href="recherche.php">recommencer</a>';
    }
    }
    else //si on n'a pas validé le formulaire, on l'affiche
    {
    ?>
    <form method="post" action="recherche.php">
    Votre recherche :
    <input type="text" name="recherche" />
    <br />
     
    <input type="submit" value="Rechercher" name="rechercher" />
    </form>
    <?php
    }
    mysql_close(); //déconnexion de la bdd
    ?>

    ca ne fonctionne toujours pas :s
    tu me donnée le code corrigé S.V.P au lieu d'un petit bout a chaque fois ^^' supprime si possible les codes qui ne sert a rien
    merci encore

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu veux un code servi sur un plateau, il faut payer un développeur.
    Sinon autant que j'aille au bureau faire des heures sup'.

    Concernant, ce que tu as déjà, je me suis multiple-gouré sur cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach($mots as $mot) {
       $conditions[] = " titre LIKE '%" . $mot . "%'"; 
    }
    if (is_array($conditions)) {
       $where = "WHERE " . implode(' AND ',  $conditions) . " ";
    }
    concernant les parties inutiles "la premiere requete", c'est assez clair je pense.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    ca fonctionne toujours pas :s

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("capmaroc");
    if (isset($_POST['rechercher'])) //si on a validé le formulaire
    {
    $recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
     
     
     //si le mode de recherche n'est pas par expression exacte
     
     
    $mots = explode(" ", $recherche); //séparation des mots
    $where = "";
     
    foreach($mots as $mot) {
       $conditions[] = " titre LIKE '%" . $mot . "%'"; 
    }
    if (is_array($conditions)) {
       $where = "WHERE " . implode(' AND ',  $conditions) . " ";
    }
     
    $sql = "SELECT * FROM movies " . $where  . "ORDER BY id DESC";
     
    $selection_recherche = mysql_query($sql);
    echo $sql;
     
     
     
     
     
     
    $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
    if ($nombre_resultats == 0) //s'il n'y a pas de résultat
    {
    echo 'aucun resultat.<a href="recherche.php">recommencer</a>';
    }
    else //il y a au moins un résultat
    {
    echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
    while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
    {
    echo '<strong>Titre:</strong> ' . $resultats['titre'] . '<br />
    <strong>Date:</strong> ' . $resultats['date'] . '<br /><br />';
    }
    echo '<a href="recherche.php">recommencer</a>';
    }
    }
    else //si on n'a pas validé le formulaire, on l'affiche
    {
    ?>
    <form method="post" action="recherche.php">
    Votre recherche :
    <input type="text" name="recherche" />
    <br />
     
    <input type="submit" value="Rechercher" name="rechercher" />
    </form>
    <?php
    }
    mysql_close(); //déconnexion de la bdd
    ?>
    quand je cherche un mot j'ai

    SELECT * FROM movies WHERE titre LIKE '%pie%' AND titre LIKE '%2012%' AND titre LIKE '%harry%' ORDER BY id DESCaucun resultat.recommencer

    :s

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Habituellement dans un formulaire de recherche, on ne tape pas le nom des films différents

    Si tu veux que les critères soient considérés indépendamment, utiliser OR a la place de AND
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    merci beaucoup ca marche de ma part j'essaie toujours de m'améliorai ^^'
    merci encore

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2010, 21h08
  2. Réponses: 5
    Dernier message: 31/03/2010, 16h53
  3. Quel est le meilleur script de Moteur de recherche ?
    Par remyli dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 21/05/2008, 14h18
  4. Recherche script pour creation d'un moteur de recherche
    Par Diss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 24/08/2006, 16h36

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