J'ai ecrit un petit script qui permet rechercher des données dans une table X à partir d'un mot clef entre dans un formulaire et les resultat s'affichents 10 par 10.
J'ai essai d'etendre ces recherche sur 2 autres tables Y, Z de la BD ; mais j'ai un leger bleme qui est le suivant:
Les resultats trouvés dans la 1ere table X s'affichent par tranche de 10 sur une page et est immediatement suivi de tous les resultats trouves dans les 2 autres tables sur les pages pages suivant on ne voit que les resultats de la table X.
Comment faire pour afficher les resutats par tranche de 10 de la table Y apres ceux de la table X
//////voir le script(recherche sur une seul table)
<?php
[ Lien ] de recherche de l'annuaire
include("param_connection.php");
[ Lien ] de l'annuaire
include("fonctions.php");
[ Lien ] de l'annuaire
$mots = isset($_REQUEST['mots']) ? $_REQUEST['mots'] : '';
$mots = trim($mots);
$page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
if($page < 0)
exit;
$booleen = isset($_REQUEST['booleen']) ? $_REQUEST['booleen'] : '';
if(empty($booleen) or $booleen != "OR")
$booleen = "AND";
$resultat_par_page= isset($_REQUEST['resultat_par_page']) ? (int)$_REQUEST['resultat_par_page'] : 0;
if($resultat_par_page<= 0)
$resultat_par_page= 10;
?>
<html>
<head>
<title>Recherche dans l'annuaire</title>
<script language="JavaScript" src="js_bulletins.js"></script>
<link type="text/css" href="alex_poll2.css" rel="stylesheet">
</head>
<body>
<?php
include("recherche_form.php");
[ Lien ] verifie la taille du mot recherche pour voir si on n'a pas entrer qu'une ou deux lettres
if ($mots == "Votre recherche :")
$mots = "";
$trop_court = false;
if (strlen(stripslashes($mots)) < 3)
[ Lien ] taille du mot est trop court....
$trop_court = true;
if (!get_magic_quotes_gpc())
[ Lien ] rajoute des slash pour les magic_quote en OFF
$mots = addslashes($mots);
if (!empty($page))
[ Lien ] on n'est pas sur la premiere page des resultats
$mots = rawurldecode($mots);
[ Lien ] separe chaque mot dans un element de tableau
$mots_cherches = explode(" ",$mots);
[ Lien ] des mots a rejetter : vous pouvez en rajouter (ils doivent faire au moins 3 caracteres !!!)
$bad_words[] = "";
$bad_words[] = "des";
$bad_words[] = "une";
$bad_words[] = "les";
[ Lien ] enleve les petits mots inutiles
$ln_tab = sizeof($mots_cherches);
for ($i=0;$i<$ln_tab;$i++)
[ Lien ] compare chaque mot a ceux non voulu
{
if (!in_array(trim($mots_cherches[$i]),$bad_words) && strlen($mots_cherches[$i]) > 2)
$mots_reels_recherches[] = $mots_cherches[$i];
}
$nb_mots = sizeof($mots_reels_recherches);
if ($nb_mots > 0 && !$trop_court)
[ Lien ] on a au moins un mot pour la recherche
{
if (empty($page))
[ Lien ] page
$page = 1;
[ Lien ] pour la clause LIMIT de la requete des agents
$debut = ($page - 1) * $resultat_par_page;
[ Lien ] peut effectuer la requete pour trouver les mots reellement recherches dans les agents et dans les catégories
[ Lien ] pour effectuer la recherche dans les agents
$sql_agent = "SELECT * FROM agent WHERE ";
$cond_agent = "";
[ Lien ] pour les agents
for ($i=0;$i<$nb_mots;$i++)
{
$cond_agent .= " (nom_agent LIKE '%$mots_reels_recherches[$i]%' OR prenom_agent LIKE '%$mots_reels_recherches[$i]%' OR matricule_agent LIKE '%$mots_reels_recherches[$i]%') ";
if ($i != ($nb_mots - 1))
[ Lien ] on n'est pas sur le dernier mot
$cond_agent .= $booleen;
}
$sql_agent .= $cond_agent;
$sql_agent .= " ORDER BY nom_agent ASC LIMIT $debut,$resultat_par_page ";
echo 'sel : '.$sql_agent;
if ($page == 1)
{
$sql_nb_agent = "SELECT count(matricule_agent) AS count FROM agent WHERE (";
$sql_nb_agent .= $cond_agent;
$sql_nb_agent .= ") ";
}
$lk = connection_BD();
[ Lien ] des requetes
$res_agent = send_sql($sql_agent,"trouver des résultats pour les agents (moteur de recherche)");
if ($page == 1)
{
$res_nb_agent = send_sql($sql_nb_agent,"trouver le nombre de sites faisant partie du résultat de la recherche");
$nb_agent_trouves = mysql_result($res_nb_agent,0,'count');
}
else
{
$nb_agent_trouves = isset($_GET['nb_agent_trouves']) ? (int)$_GET['nb_agent_trouves'] : 0;
}
[ Lien ] du nombre de pages
$nb_pages = ceil($nb_agent_trouves / $resultat_par_page);
if ($page == 1)
{
?>
<center>
<span>
<?php printf ("%d agent(s) trouvé(s) pour \"%s\" ",$nb_agent_trouves,stripslashes(htmlspecialchars($mots))); ?>
</span>
</center>
<br><br>
<?php
}
if ($nb_agent_trouves)
[ Lien ] a trouve des sites
{
?>
<table width="90%" border=0 align="center">
<span class="res_search_cat_site_annuaire">
Site(s) trouvé(s) :
<?php
$fin = $page*$resultat_par_page;
if ($fin > $nb_agent_trouves)
$fin = $nb_agent_trouves;
echo ($debut+1)." à ".$fin;
if ($page != 1)
echo " (au total : ".$nb_agent_trouves." sites trouvés)\n";
?>
</span>
<br><br>
<?php
while ($resultat = mysql_fetch_array($res_agent,MYSQL_ASSOC))
{
[ Lien ] met en gras les mots cle
for ($i = 0; $i < $nb_mots; $i++)
{
$resultat["nom_agent"] = motclef_en_gras($mots_reels_recherches[$i], $resultat["nom_agent"]);
$resultat["prenom_agent"] = motclef_en_gras($mots_reels_recherches[$i], $resultat["prenom_agent"]);
$resultat["matricule_agent"] = motclef_en_gras($mots_reels_recherches[$i], $resultat["matricule_agent"]);
}
echo $resultat["nom_agent"]. " " . $resultat["prenom_agent"]." ".$resultat["matricule_agent"];
}
echo "</table>\n";
[ Lien ] du lien vers les pages suivantes si il y a beaucoup de resultats
if ($nb_agent_trouves > $resultat_par_page)
{
?>
<center>
<span>
<?php
for ($i=1;$i<$nb_pages;$i++)
{
if ($i != $page)
echo "<a href=\"recherche.php?mots=".rawurlencode(htmlspecialchars($mots))."&page=".$i."&resultat_par_page=".$resultat_par_page."&booleen=".$booleen."&nb_agent_trouves=".$nb_agent_trouves."\">".$i."</a>\n";
else
{ echo "$i"; }
echo " - ";
}
[ Lien ] affiche le dernier numero de page (sans tiret apres)
if ($i == $page)
echo $i;
else
{ echo "<a href=\"recherche.php?mots=".rawurlencode(htmlspecialchars($mots))."&page=".$i."&resultat_par_page=".$resultat_par_page."&booleen=".$booleen."&nb_agent_trouves=".$nb_agent_trouves."\">".$i."</a>\n";
?>
</span>
</center>
<br><br>
<?php
}
}
}}//if ($nb_mots > 0)
Big El Chicano