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
-
<?php
// ---------------------------------------------------------------
// KwsPHP kOoGar Web System
// $Id: search.php 919 2011-05-08 18:16:55Z mike007 $
// ---------------------------------------------------------------
// Recherche sur le site.
// Effectue une recherche dans les modules Articles, News, Page, FAQ, Download
// Vérifie si le membre appartient au bon groupe pour voir les DL et articles
// ou qu'il à le bon grade pour voir les DL
//------------------------------------------------------------------------------
// Crée le : 15/04/08 par Calfou
// -----------------------------------------------------------------------------
-
if (! (defined ('__KWS__'))) { die ('Erreur d\'appel de fichier.'); }
-
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')))
{
if( empty($_REQUEST['sql_search_art']) and
empty($_REQUEST['sql_search_news']) and
empty($_REQUEST['sql_search_page']) and
empty($_REQUEST['sql_search_faq']) and
empty($_REQUEST['sql_search_dl']) and
!empty($_REQUEST['sql_search_forum']) )
{
$sql_search_fofo_only = true;
}
//Si pas de recherche alors on affiche le formulaire
if (empty($_REQUEST['sql_chaine_search']))
{
echo '<a class="ancre" name="rapide"></a>';
bloc_head('Recherche <span style="font-weight:bold;font-variant:small-caps">rapide sur le site</span> : ');
echo '<script type="text/javascript">
// <![CDATA[
function verifsubmit2()
{
var mots = document.formulaire_search.sql_chaine_search.value;
var art = document.getElementById("sql_search_art").checked;
var news = document.getElementById("sql_search_news").checked;
var page = document.getElementById("sql_search_page").checked;
var faq = document.getElementById("sql_search_faq").checked;
var dl = document.getElementById("sql_search_dl").checked;
var forum = document.getElementById("sql_search_forum").checked;
if (mots.length<3)
{
alert("Votre recherche doit comporter 3 caractères au minimum.");
document.formulaire_search.sql_chaine_search.focus();
return false;
}
else if(!art && !news && !page && !faq && !dl &&!forum)
{
alert("Veuillez choisir au moins une zone.");
document.getElementById("sql_search_forum").focus();
return false;
}
else
{
document.getElementById("patience2").style.display = "block";
return true;
}
-
}
// ]]>
</script>
';
echo'
<form style="text-align:center" name="formulaire_search" action="./index.php?mod='.$K_mod.'" method="post" onsubmit="return verifsubmit2()">
<fieldset><legend><strong>Recherche par mots clés</strong></legend>
<table width="100%" summary="Recherche par mots clés">
<tr>
<td width="50%">
<fieldset style="margin-right:5px"><legend><strong>Entrez un mot ou un groupe de mots :</strong></legend>
<input name="sql_chaine_search" type="text" maxlength="30" size="30" value="" />
</fieldset><br />
<input type="submit" value="Rechercher" />
</td>
<td width="50%">
<fieldset style="margin-left:5px"><legend><strong>Selectionnez les zones :</strong></legend>
<div style="float:left;width:50%;text-align:left">';
if (is_module('news')) echo '<input type="checkbox" name="sql_search_news" id="sql_search_news" /> News<br />';
if (is_module('articles')) echo '<input type="checkbox" name="sql_search_art" id="sql_search_art" /> Articles<br />';
if (is_module('page')) echo '<input type="checkbox" name="sql_search_page" id="sql_search_page" /> Pages';
echo '</div>
<div style="float:right;width:50%;text-align:left">';
if (is_module('multi-faq')) echo '<input type="checkbox" name="sql_search_faq" id="sql_search_faq" /> Faq<br />';
if (is_module('download')) echo '<input type="checkbox" name="sql_search_dl" id="sql_search_dl" /> Download<br />';
if (is_module('forum')) echo '<input type="checkbox" name="sql_search_forum" id="sql_search_forum" /> Forum';
echo '</div>
</fieldset>
</td>
</tr>
</table>
<div style="text-align:center;display:none" id="patience2">Veuillez patientez, la recherche est en cours...</div>
</fieldset>
<input type="hidden" name="sql_choix_forum[]" value="0" />
<input type="hidden" name="sql_multi_mots" value="aumoins" />
<input type="hidden" name="int_choix_recherche" value="1" />
<input type="hidden" name="int_date_search" value="0" />
</form>';
close_table();
}
elseif(!$sql_search_fofo_only)
{
//affichage de la page de résultat
bloc_head('Résultats de votre recherche :');
//Récup de la chaine recherchée
$chaine_search = $_REQUEST['sql_chaine_search'];
$chaine_search2 = strtolower($chaine_search);
$chaine_search2 = preg_split('#\s#',$chaine_search2);
$nombre_mots = count($chaine_search2);
-
$z=0; //Nombre de mots à rechercher
$n=1; //Nombre de fois a faire la boucle
//Création des variables des requêtes pour les différents modules
$search_art = '`articles`.`titre` LIKE "%'.$chaine_search.'%" OR `articles`.`texte` LIKE "%'.$chaine_search.'%"';
$search_new = '`news`.`titre` LIKE "%'.$chaine_search.'%" OR `news`.`contenu` LIKE "%'.$chaine_search.'%"';
$search_pag = '`page`.`titre` LIKE "%'.$chaine_search.'%" OR `page`.`contenu` LIKE "%'.$chaine_search2[$z].'%"';
$search_tab = '`tableau`.`titre` LIKE "%'.$chaine_search.'%" OR `tableau`.`contenu` LIKE "%'.$chaine_search2[$z].'%"';
$search_faq = '`faq_rep`.`question` LIKE "%'.$chaine_search.'%" OR `faq_rep`.`reponse` LIKE "%'.$chaine_search.'%"';
$search_dwl = '`dl`.`titre` LIKE "%'.$chaine_search.'%" OR `dl`.`description` LIKE "%'.$chaine_search.'%"';
-
//Si plus d'un mot recherché, alors on recherche tous les mots 1 par 1
while($n<$nombre_mots)
{
$search_art .= ' OR `articles`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `articles`.`texte` LIKE "%'.$chaine_search2[$z].'%"';
$search_new .= ' OR `news`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `news`.`contenu` LIKE "%'.$chaine_search.'%"';
$search_pag .= ' OR `page`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `page`.`contenu` LIKE "%'.$chaine_search2[$z].'%"';
$search_tab .= ' OR `tableau`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `tableau`.`contenu` LIKE "%'.$chaine_search2[$z].'%"';
$search_faq .= ' OR `faq_rep`.`question` LIKE "%'.$chaine_search2[$z].'%" OR `faq_rep`.`reponse` LIKE "%'.$chaine_search.'%"';
$search_dwl .= ' OR `dl`.`titre` LIKE "%'.$chaine_search2[$z].'%" OR `dl`.`description` LIKE "%'.$chaine_search2[$z].'%"';
$z++;
$n++;
}
-
//Création des différentes requêtes
//Req pour la recherche dans les articles
$sql1='
SELECT `articles`.`id` AS ida,
`articles`.`ref` AS refa,
`articles`.`texte` AS textea,
`articles`.`titre` AS titrea
FROM `articles`
LEFT JOIN `rubriques`
ON `articles`.`ref` = `rubriques`.`id`
WHERE ('.$search_art.')
AND `articles`.`validation`="0"
AND `rubriques`.`id` IN '.$K_user->rubrique[0].'
';
-
//Req pour la recherche dans les news
$sql2='
SELECT `news`.`id` AS idn, `news`.`ref` AS refn, `news`.`contenu` AS texten, `news`.`titre` AS titren
FROM `news`
WHERE `news`.`validation`="0"
AND '.$search_new.' ';
-
//Req pour la recherche dans les pages
$sql3='
SELECT `page`.`id` AS idp, `page`.`contenu` AS textep, `page`.`titre` AS titrep
FROM `page`
WHERE '.$search_pag.' ';
// Ajout de la recherche dans les tableaux pour les pages
if ( is_module('page') and $_REQUEST['sql_search_page']=='on')
{
$sql30 = 'select `tableau`.`id` AS idt FROM `tableau` WHERE '.$search_tab. ' ';
$req30 = reqmysql($sql30);
while ($ligne30=mysql_fetch_object($req30))
{
$sql3 .= ' OR `page`.`contenu` LIKE "%[table='.$ligne30->idt.'][/table]%" ';
}
}
//Req pour la recherche dans la FAQ
$sql4='
SELECT `faq_rep`.`id` AS idf, `faq_rep`.`question` AS titref, `faq_rep`.`reponse` AS textef, `faq_rep`.`categorie` AS categorief
FROM `faq_rep`
WHERE '.$search_faq.' ';
-
//Req pour la recherche dans les DL
$sql5='
SELECT `dl`.`id` AS idd, `dl`.`titre` AS titred, `dl`.`description` AS texted
FROM `dl`
LEFT JOIN `groupes_mbr`
ON `groupes_mbr`.`groupe` = `dl`.`id_groupe`
WHERE ((`groupes_mbr`.`pseudo` = "'.$K_pseudo.'" AND `groupes_mbr`.`groupe` = `dl`.`id_groupe`) OR `dl`.`id_groupe` = "0")
AND `dl`.`grade` <= "'.$K_grade.'"
AND ('.$search_dwl.') ';
-
//Execution des requêtes si le module est activé. Requete pour les articles
if (is_module('articles') and $_REQUEST['sql_search_art']=='on')
{
$req1 = reqmysql($sql1);
$nbr_res_art = mysql_num_rows($req1);
}
else
{
//S'il ne l'est pas alors on indique qu'il n'y a aucun résultat dans ce module
$nbr_res_art = 0;
}
//Requête pour les news
if ( is_module('news') and $_REQUEST['sql_search_news']=='on')
{
$req2 = reqmysql($sql2);
$nbr_res_new = mysql_num_rows($req2);
}
else
{
$nbr_res_new = 0;
}
//Requête pour les pages
if ( is_module('page') and $_REQUEST['sql_search_page']=='on')
{
$req3 = reqmysql($sql3);
$nbr_res_pag = mysql_num_rows($req3);
}
else
{
$nbr_res_pag = 0;
}
//Requête pour la FAQ
if ( is_module('multi-faq') and $_REQUEST['sql_search_faq']=='on')
{
$req4 = reqmysql($sql4);
$nbr_res_faq = mysql_num_rows($req4);
}
else
{
$nbr_res_faq = 0;
}
//Requête pour les downloads
if ( is_module('download') and $_REQUEST['sql_search_dl']=='on')
{
$req5 = reqmysql($sql5);
$nbr_res_dwl = mysql_num_rows($req5);
}
else
{
$nbr_res_dwl = 0;
}
-
$chaine_result_contenu ='Vous recherchez dans le titre ou le contenu tous les mots suivants : «<strong>'.ax($chaine_search).'</strong>», dans ';
$chaine_search_Url='';
if ($_REQUEST['sql_search_art']=='on')
{
$chaine_result_contenu .= '«<strong>les articles</strong>», ';
$chaine_search_Url .= '&sql_search_art=on';
}
if ($_REQUEST['sql_search_news']=='on')
{
$chaine_result_contenu .= '«<strong>les news</strong>», ';
$chaine_search_Url .= '&sql_search_news=on';
}
if ($_REQUEST['sql_search_page']=='on')
{
$chaine_result_contenu .= '«<strong>les pages</strong>», ';
$chaine_search_Url .= '&sql_search_page=on';
}
if ($_REQUEST['sql_search_faq']=='on')
{
$chaine_result_contenu .= '«<strong>la FAQ</strong>», ';
$chaine_search_Url .= '&sql_search_faq=on';
}
if ($_REQUEST['sql_search_dl']=='on')
{
$chaine_result_contenu .= '«<strong>download</strong>», ';
$chaine_search_Url .= '&sql_search_dl=on';
}
$chaine_result_contenu .= 'posté par tout le monde. Cette recherche concerne les mots entiers uniquement';
-
$StylePrev = 'border:1px dashed;padding:5px;';
//Affichage de la page des résultats avec le code à recopier si besoin
echo df_message('','<a style="font-variant:small-caps" href="./index.php?mod='.$K_mod.'&ac='.$K_ac.'&sql_chaine_search='.ax(str_replace(' ','%20',$chaine_search)).$chaine_search_Url.'" title="Copier le lien">Clic droit : Copier l’adresse du lien de votre recherche</a>',
$chaine_result_contenu);
-
echo '<p style="text-align:center">
<a href="index.php?mod='.$K_mod.'" title="Nouvelle recherche">Cliquez ici pour effectuer une autre recherche</a>
</p>';
//Affichage des résultats dans les articles
if ($nbr_res_art > 0)
{
echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_art.' '.(($nbr_res_art > 1) ? 'résultats' : 'résultat').' dans les articles :</legend> ';
$i=0;
while ($ligne2=mysql_fetch_object($req1))
{
$texte_search = bbcode(strtolower($ligne2->textea),0,0,1,0,0,1);
$texte_search = substr($texte_search,0,150);
$texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
$texte_search = ax($texte_search);
-
echo' <h4><strong><u><a href="./index.php?mod=articles&ac=commentaires&id='.$ligne2->ida.'" title="'.ax($ligne2->titrea).'">'.$ligne2->titrea.'</a></u></strong></h4>
<div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
-
$i++;
}
echo'</fieldset><br />';
}
//Affichage des résultats dans les news
if ($nbr_res_new >0)
{
echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_new.' '.(($nbr_res_new > 1) ? 'résultats' : 'résultat').' dans les news :</legend>';
$i=0;
while ($ligne2=mysql_fetch_object($req2))
{
$texte_search = bbcode(strtolower($ligne2->texten),0,0,1,0,0,1);
$texte_search = substr($texte_search,0,150);
$texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
$texte_search = ax($texte_search);
-
echo' <h4><strong><u><a href="./index.php?mod=news&ac=commentaires&id='.$ligne2->idn.'" title="'.ax($ligne2->titren).'">'.$ligne2->titren.'</a></u></strong></h4>
<div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
-
$i++;
}
echo'</fieldset><br />';
}
-
//Affichage des résultats dans les pages
if ($nbr_res_pag >0)
{
echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_pag.' '.(($nbr_res_pag > 1) ? 'résultats' : 'résultat').' dans les pages :</legend>';
$i=0;
while ($ligne2=mysql_fetch_object($req3))
{
$texte_search = bbcode(strtolower($ligne2->textep),0,0,1,0,0,1);
$texte_search = substr($texte_search,0,150);
$texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
$texte_search = ax($texte_search);
-
echo' <h4><strong><u><a href="./index.php?mod=page&ac=page&id_page='.$ligne2->idp.'" title="'.ax($ligne2->titrep).'">'.$ligne2->titrep.'</a></u></strong></h4>
<div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
-
$i++;
}
echo'</fieldset><br />';
}
-
//Affichage des résultats dans la FAQ
if ($nbr_res_faq >0)
{
echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_faq.' '.(($nbr_res_faq > 1) ? 'résultats' : 'résultat').' dans la FAQ :</legend>';
$i=0;
while ($ligne2=mysql_fetch_object($req4))
{
$texte_search = bbcode(strtolower($ligne2->textef),0,0,1,0,0,1);
$texte_search = substr($texte_search,0,150);
$texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
$texte_search = ax($texte_search);
-
echo' <h4><strong><u><a href="./index.php?mod=multi-faq&ac=index&action=faq&id='.$ligne2->categorief.'#Qfaq'.$ligne2->idf.'" title="'.ax($ligne2->titref).'">'.$ligne2->titref.'</a></u></strong></h4>
<div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
-
$i++;
}
echo'</fieldset><br />';
}
-
//Affichage des résultats dans Download
if ($nbr_res_dwl >0)
{
echo'<fieldset><legend style="font-variant: small-caps;font-weight:bold">'.$nbr_res_dwl.' '.(($nbr_res_dwl > 1) ? 'résultats' : 'résultat').' dans les téléchargements :</legend>';
$i=0;
while ($ligne2=mysql_fetch_object($req5))
{
$texte_search = bbcode(strtolower($ligne2->texted),0,0,1,0,0,1);
$texte_search = substr($texte_search,0,150);
$texte_search = str_replace($chaine_search,''.$chaine_search.'',strtolower($texte_search));
$texte_search = ax($texte_search);
-
echo' <h4><strong><u><a href="./index.php?mod=download&ac=afficherid&id='.$ligne2->idd.'" title="'.ax($ligne2->titred).'">'.$ligne2->titred.'</a></u></strong></h4>
<div style="'.$StylePrev.'"><em>'.bbcode($texte_search,0,0,1,1).' ...</em></div><br />';
-
$i++;
}
echo'</fieldset><br />';
}
//Si pas de résultats alors on affiche ceci :
if ($nbr_res_art==0 && $nbr_res_new==0 && $nbr_res_pag==0 && $nbr_res_faq==0 && $nbr_res_dwl==0)
{
echo '<br /><br />'.
df_message('attention','Je suis désolé mais','il n’existe aucun résultat pour votre recherche...');
}
close_table();
}
}
?>
-
A+