Re: MOD recherche et tableaux

Bonjour,

Et bien non Calfou ce n'est pas un requête de dingue mais je viens de tester et je suis obliger de passer par une requête supplémentaire car on peut avoir plusieurs tableau répondant à la recherche et un LIKE avec un IN cela ne fait pas bon ménage.

Essayes ce code pour voir si cela te conviens :

Code PHP (modules/recherche/search.php) :
Pour copier le contenu exact du code,
Veuillez citer le message
  1.  
  2. <?php
  3. // ---------------------------------------------------------------
  4. // KwsPHP kOoGar Web System
  5. // $Id: search.php 919 2011-05-08 18:16:55Z mike007 $
  6. // ---------------------------------------------------------------
  7. // Recherche sur le site.
  8. // Effectue une recherche dans les modules Articles, News, Page, FAQ, Download
  9. // Vérifie si le membre appartient au bon groupe pour voir les DL et articles
  10. // ou qu'il à le bon grade pour voir les DL
  11. //------------------------------------------------------------------------------
  12. // Crée le : 15/04/08 par Calfou
  13. // -----------------------------------------------------------------------------
  14.  
  15. if (! (defined ('__KWS__'))) { die ('Erreur d\'appel de fichier.'); }
  16.  
  17. if (get_grade() >= GRD_VISIT and (is_module('news') or is_module('articles') or is_module('page') or is_module('multi-faq') or is_module('faq') or is_module('download')))
  18. {
  19.   if( empty($_REQUEST['sql_search_art']) and
  20.     empty($_REQUEST['sql_search_news']) and
  21.     empty($_REQUEST['sql_search_page']) and
  22.     empty($_REQUEST['sql_search_faq']) and
  23.     empty($_REQUEST['sql_search_dl']) and
  24.     !empty($_REQUEST['sql_search_forum']) )
  25.   {
  26.     $sql_search_fofo_only = true;
  27.   }
  28.   //Si pas de recherche alors on affiche le formulaire
  29.   if (empty($_REQUEST['sql_chaine_search']))
  30.   {
  31.     echo '<a class="ancre" name="rapide"></a>';
  32.     bloc_head('Recherche <span style="font-weight:bold;font-variant:small-caps">rapide sur le site</span> : ');
  33.     echo '<script type="text/javascript">
  34.     // <![CDATA[
  35.       function verifsubmit2()
  36.       {
  37.         var mots = document.formulaire_search.sql_chaine_search.value;
  38.         var art = document.getElementById("sql_search_art").checked;
  39.         var news = document.getElementById("sql_search_news").checked;
  40.         var page = document.getElementById("sql_search_page").checked;
  41.         var faq = document.getElementById("sql_search_faq").checked;
  42.         var dl = document.getElementById("sql_search_dl").checked;
  43.         var forum = document.getElementById("sql_search_forum").checked;
  44.         if (mots.length<3)
  45.         {
  46.           alert("Votre recherche doit comporter 3 caractères au minimum.");
  47.           document.formulaire_search.sql_chaine_search.focus();
  48.           return false;
  49.         }
  50.         else if(!art && !news && !page && !faq && !dl &&!forum)
  51.         {
  52.           alert("Veuillez choisir au moins une zone.");
  53.           document.getElementById("sql_search_forum").focus();
  54.           return false;
  55.         }
  56.         else
  57.         {
  58.           document.getElementById("patience2").style.display = "block";
  59.           return true;
  60.         }
  61.  
  62.       }
  63.     // ]]>
  64.     </script>
  65.     ';
  66.     echo'
  67.     <form style="text-align:center" name="formulaire_search" action="./index.php?mod='.$K_mod.'" method="post" onsubmit="return verifsubmit2()">
  68.       <fieldset><legend><strong>Recherche par mots cl&eacute;s</strong></legend>
  69.         <table width="100%" summary="Recherche par mots cl&eacute;s">
  70.           <tr>
  71.             <td width="50%">
  72.               <fieldset style="margin-right:5px"><legend><strong>Entrez un mot ou un groupe de mots :</strong></legend>
  73.               <input name="sql_chaine_search" type="text" maxlength="30" size="30" value="" />
  74.               </fieldset><br />
  75.               <input type="submit" value="Rechercher"  />
  76.             </td>
  77.             <td width="50%">
  78.               <fieldset style="margin-left:5px"><legend><strong>Selectionnez les zones :</strong></legend>
  79.                 <div style="float:left;width:50%;text-align:left">';
  80.                   if (is_module('news')) echo '<input type="checkbox" name="sql_search_news" id="sql_search_news" /> News<br />';
  81.                   if (is_module('articles')) echo '<input type="checkbox" name="sql_search_art" id="sql_search_art" /> Articles<br />';
  82.                   if (is_module('page')) echo '<input type="checkbox" name="sql_search_page" id="sql_search_page" /> Pages';
  83.                 echo '</div>
  84.                 <div style="float:right;width:50%;text-align:left">';
  85.                   if (is_module('multi-faq')) echo '<input type="checkbox" name="sql_search_faq" id="sql_search_faq" /> Faq<br />';
  86.                   if (is_module('download')) echo '<input type="checkbox" name="sql_search_dl" id="sql_search_dl" /> Download<br />';
  87.                   if (is_module('forum')) echo '<input type="checkbox" name="sql_search_forum" id="sql_search_forum" /> Forum';
  88.                 echo '</div>
  89.               </fieldset>
  90.             </td>
  91.           </tr>
  92.         </table>
  93.       <div style="text-align:center;display:none" id="patience2">Veuillez patientez, la recherche est en cours...</div>
  94.       </fieldset>
  95.     <input type="hidden" name="sql_choix_forum[]" value="0" />
  96.     <input type="hidden" name="sql_multi_mots" value="aumoins" />
  97.     <input type="hidden" name="int_choix_recherche" value="1" />
  98.     <input type="hidden" name="int_date_search" value="0" />
  99.     </form>';
  100.     close_table();
  101.   }
  102.   elseif(!$sql_search_fofo_only)
  103.   {
  104.     //affichage de la page de résultat
  105.     bloc_head('R&eacute;sultats de votre recherche :');
  106.     //Récup de la chaine recherchée
  107.     $chaine_search = $_REQUEST['sql_chaine_search'];
  108.     $chaine_search2 = strtolower($chaine_search);
  109.     $chaine_search2 = preg_split('#\s#',$chaine_search2);
  110.     $nombre_mots = count($chaine_search2);
  111.  
  112.     $z=0; //Nombre de mots à rechercher
  113.     $n=1; //Nombre de fois a faire la boucle
  114.     //Création des variables des requêtes pour les différents modules
  115.     $search_art = '`articles`.`titre` LIKE "%'.$chaine_search.'%" OR `articles`.`texte` LIKE "%'.$chaine_search.'%"';
  116.     $search_new = '`news`.`titre` LIKE "%'.$chaine_search.'%" OR `news`.`contenu` LIKE "%'.$chaine_search.'%"';
  117.     $search_pag = '`page`.`titre` LIKE "%'.$chaine_search.'%" OR `page`.`contenu` LIKE "%'.$chaine_search2[$z].'%"';
  118.     $search_tab = '`tableau`.`titre` LIKE "%'.$chaine_search.'%" OR `tableau`.`contenu` LIKE "%'.$chaine_search2[$z].'%"';
  119.     $search_faq = '`faq_rep`.`question` LIKE "%'.$chaine_search.'%" OR `faq_rep`.`reponse` LIKE "%'.$chaine_search.'%"';
  120.     $search_dwl = '`dl`.`titre` LIKE "%'.$chaine_search.'%" OR `dl`.`description` LIKE "%'.$chaine_search.'%"';
  121.  
  122.     //Si plus d'un mot recherché, alors on recherche tous les mots 1 par 1
  123.     while($n<$nombre_mots)
  124.     {
  125.       $search_art .= ' OR `articles`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `articles`.`texte` LIKE "%'.$chaine_search2[$z].'%"';
  126.       $search_new .= ' OR `news`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `news`.`contenu` LIKE "%'.$chaine_search.'%"';
  127.       $search_pag .= ' OR `page`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `page`.`contenu` LIKE "%'.$chaine_search2[$z].'%"';
  128.       $search_tab .= ' OR `tableau`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `tableau`.`contenu` LIKE "%'.$chaine_search2[$z].'%"';
  129.       $search_faq .= ' OR `faq_rep`.`question` LIKE "%'.$chaine_search2[$z].'%" OR `faq_rep`.`reponse` LIKE "%'.$chaine_search.'%"';
  130.       $search_dwl .= ' OR `dl`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `dl`.`description` LIKE "%'.$chaine_search2[$z].'%"';
  131.       $z++;
  132.       $n++;
  133.     }
  134.  
  135.     //Création des différentes requêtes
  136.     //Req pour la recherche dans les articles
  137.     $sql1='
  138.     SELECT    `articles`.`id` AS ida,
  139.           `articles`.`ref` AS refa,
  140.           `articles`.`texte` AS textea,
  141.           `articles`.`titre` AS titrea
  142.     FROM `articles`
  143.     LEFT JOIN `rubriques`
  144.         ON  `articles`.`ref` = `rubriques`.`id`
  145.     WHERE    ('.$search_art.')
  146.     AND      `articles`.`validation`="0"
  147.     AND      `rubriques`.`id` IN '.$K_user->rubrique[0].'
  148.     ';
  149.  
  150.     //Req pour la recherche dans les news
  151.     $sql2='
  152.     SELECT `news`.`id` AS idn, `news`.`ref` AS refn, `news`.`contenu` AS texten, `news`.`titre` AS titren
  153.     FROM `news`
  154.     WHERE  `news`.`validation`="0"
  155.     AND    '.$search_new.' ';
  156.  
  157.     //Req pour la recherche dans les pages
  158.     $sql3='
  159.     SELECT `page`.`id` AS idp, `page`.`contenu` AS textep, `page`.`titre` AS titrep
  160.     FROM `page`
  161.     WHERE '.$search_pag.' ';
  162.     // Ajout de la recherche dans les tableaux pour les pages 
  163.     if ( is_module('page') and $_REQUEST['sql_search_page']=='on')
  164.     {
  165.       $sql30 = 'select `tableau`.`id` AS idt FROM `tableau` WHERE '.$search_tab. ' ';
  166.       $req30 = reqmysql($sql30);
  167.       while ($ligne30=mysql_fetch_object($req30))
  168.       {
  169.         $sql3 .= ' OR `page`.`contenu` LIKE "%[table='.$ligne30->idt.'][/table]%" ';
  170.       }
  171.     }
  172.     
  173.     //Req pour la recherche dans la FAQ
  174.     $sql4='
  175.     SELECT `faq_rep`.`id` AS idf, `faq_rep`.`question` AS titref, `faq_rep`.`reponse` AS textef, `faq_rep`.`categorie` AS categorief
  176.     FROM `faq_rep`
  177.     WHERE '.$search_faq.' ';
  178.  
  179.     //Req pour la recherche dans les DL
  180.     $sql5='
  181.     SELECT `dl`.`id` AS idd, `dl`.`titre` AS titred, `dl`.`description` AS texted
  182.     FROM `dl`
  183.     LEFT JOIN `groupes_mbr`
  184.     ON    `groupes_mbr`.`groupe` = `dl`.`id_groupe`
  185.     WHERE    ((`groupes_mbr`.`pseudo` = "'.$K_pseudo.'" AND `groupes_mbr`.`groupe` = `dl`.`id_groupe`) OR `dl`.`id_groupe` = "0")
  186.     AND  `dl`.`grade` <= "'.$K_grade.'"
  187.     AND  ('.$search_dwl.') ';
  188.  
  189.     //Execution des requêtes si le module est activé.  Requete pour les articles
  190.     if (is_module('articles') and $_REQUEST['sql_search_art']=='on')
  191.     {
  192.       $req1 = reqmysql($sql1);
  193.       $nbr_res_art = mysql_num_rows($req1);
  194.     }
  195.     else
  196.     {
  197.       //S'il ne l'est pas alors on indique qu'il n'y a  aucun résultat dans ce module
  198.       $nbr_res_art = 0;
  199.     }
  200.     //Requête pour les news
  201.     if ( is_module('news') and $_REQUEST['sql_search_news']=='on')
  202.     {
  203.       $req2 = reqmysql($sql2);
  204.       $nbr_res_new = mysql_num_rows($req2);
  205.     }
  206.     else
  207.     {
  208.       $nbr_res_new = 0;
  209.     }
  210.     //Requête pour les pages
  211.     if ( is_module('page') and $_REQUEST['sql_search_page']=='on')
  212.     {
  213.       $req3 = reqmysql($sql3);
  214.       $nbr_res_pag = mysql_num_rows($req3);
  215.     }
  216.     else
  217.     {
  218.       $nbr_res_pag = 0;
  219.     }
  220.     //Requête pour la FAQ
  221.     if ( is_module('multi-faq') and $_REQUEST['sql_search_faq']=='on')
  222.     {
  223.       $req4 = reqmysql($sql4);
  224.       $nbr_res_faq = mysql_num_rows($req4);
  225.     }
  226.     else
  227.     {
  228.       $nbr_res_faq = 0;
  229.     }
  230.     //Requête pour les downloads
  231.     if ( is_module('download') and $_REQUEST['sql_search_dl']=='on')
  232.     {
  233.       $req5 = reqmysql($sql5);
  234.       $nbr_res_dwl = mysql_num_rows($req5);
  235.     }
  236.     else
  237.     {
  238.       $nbr_res_dwl = 0;
  239.     }
  240.  
  241.     $chaine_result_contenu ='Vous recherchez dans le titre ou le contenu tous les mots suivants : &laquo;<strong>'.ax($chaine_search).'</strong>&raquo;, dans ';
  242.     $chaine_search_Url='';
  243.     if ($_REQUEST['sql_search_art']=='on')
  244.     {
  245.       $chaine_result_contenu .= '&laquo;<strong>les articles</strong>&raquo;, ';
  246.       $chaine_search_Url .= '&amp;sql_search_art=on';
  247.     }
  248.     if ($_REQUEST['sql_search_news']=='on')
  249.     {
  250.       $chaine_result_contenu .= '&laquo;<strong>les news</strong>&raquo;, ';
  251.       $chaine_search_Url .= '&amp;sql_search_news=on';
  252.     }
  253.     if ($_REQUEST['sql_search_page']=='on')
  254.     {
  255.       $chaine_result_contenu .= '&laquo;<strong>les pages</strong>&raquo;, ';
  256.       $chaine_search_Url .= '&amp;sql_search_page=on';
  257.     }
  258.     if ($_REQUEST['sql_search_faq']=='on')
  259.     {
  260.       $chaine_result_contenu .= '&laquo;<strong>la FAQ</strong>&raquo;, ';
  261.       $chaine_search_Url .= '&amp;sql_search_faq=on';
  262.     }
  263.     if ($_REQUEST['sql_search_dl']=='on')
  264.     {
  265.       $chaine_result_contenu .= '&laquo;<strong>download</strong>&raquo;, ';
  266.       $chaine_search_Url .= '&amp;sql_search_dl=on';
  267.     }
  268.     $chaine_result_contenu .= 'post&eacute; par tout le monde. Cette recherche concerne les mots entiers uniquement';
  269.  
  270.     $StylePrev = 'border:1px dashed;padding:5px;';
  271.     //Affichage de la page des résultats avec le code à recopier si besoin
  272.     echo df_message('','<a style="font-variant:small-caps" href="./index.php?mod='.$K_mod.'&amp;ac='.$K_ac.'&amp;sql_chaine_search='.ax(str_replace(' ','%20',$chaine_search)).$chaine_search_Url.'" title="Copier le lien">Clic droit : Copier l&rsquo;adresse du lien de votre recherche</a>',
  273.     $chaine_result_contenu);
  274.  
  275.     echo '<p style="text-align:center">
  276.     <a href="index.php?mod='.$K_mod.'" title="Nouvelle recherche">Cliquez ici pour effectuer une autre recherche</a>
  277.     </p>';
  278.     //Affichage des résultats dans les articles
  279.     if ($nbr_res_art > 0)
  280.     {
  281.       echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_art.' '.(($nbr_res_art > 1) ? 'r&eacute;sultats' : 'r&eacute;sultat').' dans les articles :</legend> ';
  282.       $i=0;
  283.       while ($ligne2=mysql_fetch_object($req1))
  284.       {
  285.         $texte_search = bbcode(strtolower($ligne2->textea),0,0,1,0,0,1);
  286.         $texte_search = substr($texte_search,0,150);
  287.         $texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
  288.         $texte_search = ax($texte_search);
  289.  
  290.         echo' <h4><strong><u><a href="./index.php?mod=articles&amp;ac=commentaires&amp;id='.$ligne2->ida.'" title="'.ax($ligne2->titrea).'">'.$ligne2->titrea.'</a></u></strong></h4>
  291.         <div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
  292.  
  293.         $i++;
  294.       }
  295.        echo'</fieldset><br />';
  296.     }
  297.     //Affichage des résultats dans les news
  298.     if ($nbr_res_new >0)
  299.     {
  300.       echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_new.' '.(($nbr_res_new > 1) ? 'r&eacute;sultats' : 'r&eacute;sultat').' dans les news :</legend>';
  301.       $i=0;
  302.       while ($ligne2=mysql_fetch_object($req2))
  303.       {
  304.         $texte_search = bbcode(strtolower($ligne2->texten),0,0,1,0,0,1);
  305.         $texte_search = substr($texte_search,0,150);
  306.         $texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
  307.         $texte_search = ax($texte_search);
  308.  
  309.         echo' <h4><strong><u><a href="./index.php?mod=news&amp;ac=commentaires&amp;id='.$ligne2->idn.'" title="'.ax($ligne2->titren).'">'.$ligne2->titren.'</a></u></strong></h4>
  310.         <div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
  311.  
  312.         $i++;
  313.       }
  314.       echo'</fieldset><br />';
  315.     }
  316.  
  317.     //Affichage des résultats dans les pages
  318.     if ($nbr_res_pag >0)
  319.     {
  320.       echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_pag.' '.(($nbr_res_pag > 1) ? 'r&eacute;sultats' : 'r&eacute;sultat').' dans les pages :</legend>';
  321.       $i=0;
  322.       while ($ligne2=mysql_fetch_object($req3))
  323.       {
  324.         $texte_search = bbcode(strtolower($ligne2->textep),0,0,1,0,0,1);
  325.         $texte_search = substr($texte_search,0,150);
  326.         $texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
  327.         $texte_search = ax($texte_search);
  328.  
  329.         echo' <h4><strong><u><a href="./index.php?mod=page&amp;ac=page&amp;id_page='.$ligne2->idp.'" title="'.ax($ligne2->titrep).'">'.$ligne2->titrep.'</a></u></strong></h4>
  330.         <div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
  331.  
  332.         $i++;
  333.       }
  334.       echo'</fieldset><br />';
  335.     }
  336.  
  337.     //Affichage des résultats dans la FAQ
  338.     if ($nbr_res_faq >0)
  339.     {
  340.       echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_faq.' '.(($nbr_res_faq > 1) ? 'r&eacute;sultats' : 'r&eacute;sultat').' dans la FAQ :</legend>';
  341.       $i=0;
  342.       while ($ligne2=mysql_fetch_object($req4))
  343.       {
  344.         $texte_search = bbcode(strtolower($ligne2->textef),0,0,1,0,0,1);
  345.         $texte_search = substr($texte_search,0,150);
  346.         $texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
  347.         $texte_search = ax($texte_search);
  348.  
  349.         echo' <h4><strong><u><a href="./index.php?mod=multi-faq&amp;ac=index&amp;action=faq&amp;id='.$ligne2->categorief.'#Qfaq'.$ligne2->idf.'" title="'.ax($ligne2->titref).'">'.$ligne2->titref.'</a></u></strong></h4>
  350.         <div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
  351.  
  352.         $i++;
  353.       }
  354.       echo'</fieldset><br />';
  355.     }
  356.  
  357.     //Affichage des résultats dans Download
  358.     if ($nbr_res_dwl >0)
  359.     {
  360.       echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_dwl.' '.(($nbr_res_dwl > 1) ? 'r&eacute;sultats' : 'r&eacute;sultat').' dans les téléchargements :</legend>';
  361.       $i=0;
  362.       while ($ligne2=mysql_fetch_object($req5))
  363.       {
  364.         $texte_search = bbcode(strtolower($ligne2->texted),0,0,1,0,0,1);
  365.         $texte_search = substr($texte_search,0,150);
  366.         $texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
  367.         $texte_search = ax($texte_search);
  368.  
  369.         echo' <h4><strong><u><a href="./index.php?mod=download&amp;ac=afficherid&amp;id='.$ligne2->idd.'" title="'.ax($ligne2->titred).'">'.$ligne2->titred.'</a></u></strong></h4>
  370.         <div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
  371.  
  372.         $i++;
  373.        }
  374.       echo'</fieldset><br />';
  375.     }
  376.     //Si pas de résultats alors on affiche ceci :
  377.     if ($nbr_res_art==0 && $nbr_res_new==0 && $nbr_res_pag==0 && $nbr_res_faq==0 && $nbr_res_dwl==0)
  378.     {
  379.       echo '<br /><br />'.
  380.       df_message('attention','Je suis d&eacute;sol&eacute; mais','il n&rsquo;existe aucun r&eacute;sultat pour votre recherche...');
  381.     }
  382.     close_table();
  383.   }
  384. }
  385. ?>
  386.  


A+


Sujet écrit par Garveur le lundi 25 juillet 2011 à 16:08

[ Imprimer ] - [ Fermer la fenêtre ]