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

PHP & Base de données Discussion :

Moteur de recherche


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de hadjiphp
    Inscrit en
    Décembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 155
    Par défaut Moteur de recherche
    Bonjour,
    j'ai une question :
    j'ai un code php qui permet de faire un recherche dans la base de donnée (un moteur de recherche)

    voici le code php :

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    <?php
    mysql_connect( "localhost", "root", "" ) ; //connexion à la bdd
    mysql_select_db("INFOS") ;
    if (isset($_POST['rechercher'])) //si on a validé le formulaire
    {
    $recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
    $mode = mysql_real_escape_string(htmlspecialchars($_POST['mode']));
    if (isset($_POST['sujets_fermes'])) //si on a coché la case
    {
    $sujets_fermes = "AND ferme='1'";
    }
    else //si on ne l'a pas cochée
    {
    $sujets_fermes = '';
    }
    if ($mode == "tous_les_mots")
    {
    $and_ou_or = 'AND'; //on utilisera AND dans la boucle
    }
    else
    {
    $and_ou_or = 'OR'; //on utilisera OR dans la boucle
    }
    if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte
    {
    $selection_recherche = mysql_query("SELECT url,titre,terme,occure FROM result WHERE terme LIKE '%$recherche%' $sujets_fermes");
    }
    else //si le mode de recherche n'est pas par expression exacte
    {
    $aTab = preg_split('`[\s| : \ , \ ; \ . \ « \ » \%\&\0\1\2\3\4\5\6\7\7\8\9\=\*\@\<\>\;\-\ " \ \ \ / \ { \ } \ - \ # \ < \ > \  _ (  \
    	                        )  \  +  \  -\[\]\=\?\!\^\`\¿\_\{\}\|\~\€\‚\ƒ\„\…\†\‡\ˆ\‰\Š\‹\Œ\Ž\‘\’\“\”\•\–\—	\˜\™\š\›\œ\ž\¨\µ\¬\$\©\@\§\ \ ]+`', $recherche);//caractéres spécieux keyword
    $champs1=implode(" ",$aTab); //keyword
    	  echo ("$champs1"); print"<br><br>";
     
    $motsExclus = array('a','afin','ai','ainsi','ais','ait','alors','après','as','assez','au','aucun','aucune','auprès','auquel','auxquelles',
    	                      'auwquels','auraient','aurais','aurait','aurez','auriez','aurions','aurons','auront','aussi','aussitôt','autant','autre',
    						  'autres','aux','avaient','avais','avait','avant','avez','aviez','avoir','avons','ayant','beaucoup','car','ce','ceci','cela',
    						  'celle','celles','celui','cependant','certes','ces','cet','cette','ceux','chacun','chacune','chaque','chez','cinq','comme',
    						  'comment','dans','de','dehors','delà','depuis','des','dessous','dessus','deux','deçà','dix','doit','donc','dont','du','durant',
    						  'duquel','dès','déjà','elle','elles','en','encore','enfin','entre','er','est','est-ce','et','etc','eu','eux','eurent','eut','faut',
    						  'fur','furent','grâce','hormis','hors','huit','ici','il','ils','je','la','laquels','le','les','lesquels','leur','leurs','lors',
    						  'lorsque','lui','là','mais','malgré','me','melle','mes','mien','mienne','miennes','miens','mm','mme','moi','moins','moment','mon',
    						  'mr','même','neuf','ni','non-','non','nos','notamment','notre','nôtres','nous','néanmoins','on','ont','ou','oui','où','par','parce',
    						  'parfois','parmi','partout','pas','pendant','peu','peut','peut-être','plus','plutôt','pour','pourquoi','près','puis','puisque','quand',
    						  'quant','quatre','que','quel','quelle','quelles','quelque','quelquefois','quelques','quels','qui','quoi','quot','sa','sans','sauf','se',
    						  'selon','sept','sera','seraient','serai','seraient','serais','serait','seras','serez','seriez','serions','serons','ses','si','sien',
    						  'siennes','siens','sitôt','six','soi','soit','sommes','son','sont','sous','souvent','suis','sur','tandis','tant','tes','tienne','tiennes',
    						  'tiens','toi','ton','toujours','tous','tout','toute','toutefois','toutes','tois','trop','très','tu','un','une','unes','uns','voici','vos',
    						  'votre','vous','vôtres','y','à','ème','ére','étaient','étais','était','étant','étiez','étions','êtes','être','été',"d'","s'","c'","m'","n'",
    						  "j'","l'","t'");
     
    if( preg_match_all('`\w{2,}`', $champs1, $result) )
    {
       // Remplacement des mots exclus par rien
       $result[0] = preg_replace('`\b(' . implode($motsExclus, '|') . ')\b`i', '', $result[0]);
       // Suppression des éléments vides avec array_filter()
       $result[0] = array_filter($result[0]);
    }
    $champs11=implode(" ", $result[0]);
    	  echo ("$champs11"); print"<br><br>";
     
    $mots = explode(" ", $champs11); //séparation des mots reprtésentation sous forme d'un tableau
     
    $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 .= '' . $and_ou_or . ' terme LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
    }
    $valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
    $selection_recherche = mysql_query("SELECT url,titre,terme,occure
    FROM result
    WHERE $valeur_requete $sujets_fermes"); //requête avec le résultat de la boucle dedans
    }
     
    $nombre_resultats1 = mysql_fetch_array($selection_recherche);
     
    $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>Terme:</strong> ' . $resultats['terme'] . '<br />
    <strong>URL:</strong> ' . $resultats['url'] . '<br />
    <strong>OCCURENCE:</strong> ' . $resultats['occure'] . '<br />
    <strong>Titre:</strong> ' . $resultats['titre'] . '<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 />
    Votre mode de recherche :
    <select name="mode">
    <option value="expression_exacte">Expression exacte</option>
    <option value="tous_les_mots">Tous les mots</option>
    <option value="un_mot">Au moins un mot</option>
    </select>
    <br />
    Sélectionner uniquement les sujets fermés :
    <input name="sujets_fermes" type="checkbox" />
    <br />
    <input type="submit" value="Rechercher" name="rechercher" />
    </form>
    <?php
    }
    mysql_close(); //déconnexion de la bdd
    ?>


    ma question et quand je fait ma recherche, si le nombre de resultat par exemple est 16 elle affiche :
    nombre de résultats: 16
    mais elle affiche seulement 15 resultat (Terme: alger
    URL:
    OCCURENCE:
    Titre: )


    c_à-d a chaque recherche elle affiche "nombre de résultats: n"
    mais affiche seulement n-1 recultat.

    svp de me répondre.
    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    C'est à cause de ton 1er mysql_fetch_array( ) qui n'est pas exploité.

Discussions similaires

  1. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  2. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  3. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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