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

EDI, CMS, Outils, Scripts et API PHP Discussion :

correction l'erreur dans mon moteur de recherche


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 correction l'erreur dans mon moteur de recherche
    Bonjour,
    j'ai une question :
    j'ai un code php qui de faire un moteur de recherche.
    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
    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
     
    <?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['offre'])) $offre=$_POST['offre'];//si on a coché la case
     
         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,poids,type_offre,resume FROM document,terme WHERE document.code_doc=terme.code_doc AND type_offre='$offre' AND terme LIKE '%$recherche%' group by url ORDER BY poids DESC  ");
            }
          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
     
     
               $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]);
     
     
             $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,poids,type_offre,resume
             FROM document,terme,titre
             WHERE document.code_doc=terme.code_doc AND type_offre='$offre' AND $valeur_requete group by url ORDER BY poids 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
    	 	 	$somme = array();
                $somme2 = array();
         if ($nombre_resultats == 0) //s'il n'y a pas de résultat
            {
    		   echo("<META HTTP-equiv=\"refresh\" content=0;URL=aucun_resultat.php?nombre_resultats=$nombre_resultats&champs1=$champs1>");
     
            }
        else //il y a au moins un résultat
           {?>
    <div id="navigationnn1"><!-- c'est la partie au en remplit le contenu-->
      <div id="resultatsite">
         <b>Recherche dans le site</b>
      </div>
     <!-- <div id="text">Si vous cherchez une offre de <b>stage</b> ou d'<b>emploi</b></div>-->
     <form method="post" action="recherche site.php">
     <table width="700" align="center" bgcolor="#333366" style="margin-top:-15px; "  >
           <tr> 
    	      <td><span class="Style1">Choisir et lancer maintenant votre recherche</span></td>
           </tr>
    	    <tr>
    	      <td bgcolor="#F2F2F2"> <p>&nbsp;
              </p>
    	        <p>
            <input type="text" name="recherche" VALUE SIZE="31" MAXLENGTH="255" style="margin-bottom:10px;"> 
            <input type="submit" value="Rechercher" name="rechercher" style="margin-bottom:10px;"> 
            <br>
    		<select name="mode" style="display:none">
           <option value="expression_exacte"></option>
           <option value="tous_les_mots"></option>
           <option value="un_mot" selected>Au moins un mot</option>
           </select>
     
    		Rechercher dans :&nbsp;&nbsp;&nbsp;
            <input type="radio" name="offre" value="stage"> Stage
            <input type="radio" name="offre" value="emploi" checked> Emploi </p>
    	        <p>&nbsp;</p></td>
           </tr>
          </table>
    	  </form>
    <hr  style="border-bottom:solid 1px #000066; margin-top:-20px;width:900px; "></hr>
    	   <?php  
            echo '<div style="background-color:#E0E0E0; width:900px; margin-top:-25px; height:25px; text-align:left;">&nbsp;&nbsp;&nbsp;
    		      <strong>Site</strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			  Nombre de résultats : <strong> ' . $nombre_resultats . '</strong>&nbsp;&nbsp;&nbsp;pour <strong>'.$champs1.'</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><br /><br />'; //nombre de résultats
             while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
                  {
                    if(!array_key_exists($resultats["url"], $somme))
    				{
                    $somme[$resultats["url"]] = 0;
                    $somme[$resultats["url"]] +=  $resultats["poids"];
    				}
     
                    if(!array_key_exists($resultats["url"], $somme2))
    				{
                    $somme2[$resultats["url"]] = 0;
                    $somme2[$resultats["url"]] +=  $resultats["poids"] * $resultats["poids"];
    				}
     
                  }
           }
    	   arsort($somme);
     
    	foreach ($somme as $url => $poids) 
    		 {
    		   $somme_carre=$somme2[$url];
    		   $racine_sommecarre=sqrt($somme2[$url]);
    		   $somme_mot=sqrt($nombre_mots);
    		   $rsv=$poids/($somme_mot*$racine_sommecarre);
    		   $affichage=mysql_query("select titre,resume,type_offre FROM document WHERE url='$url'"); 
    		   $affichage1 = mysql_fetch_array($affichage);
     
    		   echo '<p align="left" style="margin-bottom:-60px; font-size=15px; margin-left:18px;"><a href=' .$url. '>'.$affichage1['titre'].'</a>...<p><br>
    		   <p><hr  style="border-bottom:solid 1px #000066;width:870px; margin-left:3px; margin-bottom:-50px;"></hr></p><br>
    		   <p align="left" style="margin-bottom:-50px; margin-left:35px; margin-top:-30px; margin-right:20px;">'.$affichage1['resume'].'...<p><br>
    		   <p align="left" style="margin-bottom:-50px; color:#0F7C91; margin-left:35px;">' . $url . '<p><br><br><br>';
     
           }
      } //fin de if(isset)
     
    else //si on n'a pas validé le formulaire, on l'affiche
        {       ?>
    	<div id="recherchesite">
    <b>Recherche dans le site</b>
      </div>
      <div id="text">Si vous cherchez une offre de <b>stage</b> ou d'<b>emploi</b></div>
      <div id="espace">
     
    <form method="post" action="afficher_visiteur.php">
     <table width="700" align="center" bgcolor="#333366"   >
           <tr> 
    	      <td><span class="Style1">Choisir et lancer maintenant votre recherche</span></td>
           </tr>
     
    	      <td bgcolor="#F2F2F2"> <p>&nbsp;
              </p>
    	        <p>
            <input type="text" name="recherche" VALUE SIZE="31" MAXLENGTH="255" style="margin-bottom:10px;"> 
            <input type="submit" value="Rechercher" name="rechercher" style="margin-bottom:10px;"> 
            <br>
    		<select name="mode" style="float:left; margin-left:185px; display:none " >
             <option value="expression_exacte">Expression Eexacte</option>
             <option value="tous_les_mots">Tout les mots</option>
             <option value="un_mot" selected>Au moins un mot</option>
           </select>
    	   Rechercher dans :
           <input type="radio" name="offre" value="stage"> Stage   
           <input type="radio" name="offre" value="emploi" checked> Emploi </p>
    	        <p>&nbsp;</p></td>
           </tr>
     
    	   <tr>
          </table>
    	  </form>
    	  <?php
    	      mysql_close(); //déconnexion de la bdd
    		  }
    		  ?>
    ma question :
    1-quand je fait la recherche d'une <gras>chaine de mot</gras> elle affichera toujour tout les URL qui ce trouve dans la base et aussi dans le cas au cette mot recherché ne ce trouve pas dans cette URL.
    2- quand je fait une recherche d'un seul mot elle affichera<gras> aucun resultat </gras> mais cette mot elle se trouve dans un URL ou plusieur URL.

    j'ai fait tout mes solutions mais ça marche pas???????????????????
    svp a ce qu'il ya qlq peut me répondre je suis vraiment perturbé svp svp svp je suis bloqué.

    Merci d'avance

  2. #2
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par hadjiphp Voir le message
    Bonjour,
    Bonjour,
    je suis sur ton affaire mais c'est bien écrit , juste un peut long a analyser,
    pour le moment juste litle détail ....

    Tu as une ouverture de MYSQL
    puis un gran IF puis un ELSE
    ors tu ferme MYSQL que sur le ELSE

    au moins ça fait un point de détail traité,

    Bon allez je retournes a mes fourneaux
    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
     
     
    <?PHP
    mysql_connect( "localhost", "root", "" ) ; //connexion à la bdd
    mysql_select_db("INFOS") ;
     
    if (isset($_POST['rechercher'])) //si on a validé le formulaire
       {
       } //fin de if(isset)
      else //si on n'a pas validé le formulaire, on l'affiche
        { ?>
             <!-- ETC -->
      <?php
         }
    mysql_close(); //déconnexion de la bdd
     
    ?>
    A ++

  3. #3
    Membre expérimenté
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Par défaut
    - Expose plus clairement ton problème en t'exprimant dans un français correct ;
    - Donne les parties concernées de ton code.

    Pourquoi tous ces espaces dans $aTab ? Et tu es sûr pour les simples quotes ?

  4. #4
    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
    Bonjour,
    ça marche pas, le probleme n'est pas réglé a ce que vous pouvez me répondre.
    Merci d'avance.

  5. #5
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par Caerbannog Voir le message
    - Expose plus clairement ton problème en t'exprimant dans un français correct ;
    - Donne les parties concernées de ton code.

    Pourquoi tous ces espaces dans $aTab ? Et tu es sûr pour les simples quotes ?
    Bonjour,
    au moins ça te fais un message de plus , c'est bien

    tout ça pour dire
    Expose plus clairement ton problème
    il est bien posé et j'y répond,le code est rigoureux et bien écrit !
    exprimes toi en français
    ça c'est intéligent et montre ton ouverture aux autres
    Donne les parties concernées de ton code
    Pour travailler dessus depuis longtemps il m'aurait manqué des éléments pour comprendre ou sa n'allait pas.

    Pourquoi tous ces espaces dans $aTab
    Si tu avais regardé, pour appliquer le implode , tu ne savais pas ?

    tu es sûr pour les simples quotes ?

    Tu aurais pu vérifier, OUI ils sont bons mais
    tu confonds peut' étre ' ET `

  6. #6
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Bonjour,

    Peux tu jetter un coup d'oeil à ce poste ? http://www.developpez.net/forums/d72...eur-recherche/

  7. #7
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par thes32 Voir le message
    Bonjour,
    Peux tu jetter un coup d'oeil à ce poste ? http://www.developpez.net/forums/d72...eur-recherche/
    J'ais mis du temps a réagir , le temps de digérer ce texte,
    bravo d'avoir remis la main sur ce FIL !!
    tu as raison piste excelente

  8. #8
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par hadjiphp Voir le message
    Bonjour,
    Je continues avec cette faute de syntaxe qui fait que tes IF ne peuvent jamais étre valide car aux DEUX endroits tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <select name="mode" style="float:left; margin-left:185px; display:none " >
         <option value="expression_exacte">Expression Eexacte</option>
         <option value="tous_les_mots">Tout les mots</option>
         <option value="un_mot" selected>Au moins un mot</option>
         </select>
    AU LIEU DE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <select style="float:left; margin-left:185px; display:none " >
      <option label="mode" value="expression_exacte">Expression Eexacte</option>
      <option label="mode" value="tous_les_mots">Tout les mots</option>
      <option label="mode" value="un_mot" selected="selected">Au moins un mot</option>
    </select>
    je sent que ça va aller mieux,
    Mais pourquoi se choix caché alors que tu force Au moins un mot

Discussions similaires

  1. [MySQL] Erreur dans mon "moteur de recherche"
    Par clairetj dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/12/2013, 22h14
  2. [MySQL] recherche avec plusieurs mots dans mon moteur
    Par hadjiphp dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/05/2009, 08h53
  3. Comment référencer mon site dans les moteurs de recherches ?
    Par Viper7 dans le forum Référencement
    Réponses: 9
    Dernier message: 07/06/2006, 23h18
  4. [langage]erreur dans mon script
    Par Fabouney dans le forum Langage
    Réponses: 11
    Dernier message: 30/06/2005, 14h58
  5. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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