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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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