Eléphant du PHP |
257 Messages
04 mars 2012, 21:42
bonjour , voilà en faite j'essaie de paginer suivant ma recherche page par page, la pagination c'est ok cela fonctionne super? , le soucis c'est quand tu passe de la premier page à la seconde je paire les données de la demande de recherche??? une idée la dessus svp?
<?php
include("cssstyle/haut.php");
include("sources/config.php");
// montage du critère
$where = array();
// j'ai considéré que tous ces champs étaient des varchar dans ta base de données
if (isset($_POST['typeb']) && strlen($_POST['typeb'])) {
$where[] = "typeb = '".mysql_real_escape_string($_POST['typeb'])."'";
}
if (isset($_POST['pays']) && strlen($_POST['pays'])) {
$where[] = "pays = '".mysql_real_escape_string($_POST['pays'])."'";
}
if (isset($_POST['province']) && strlen($_POST['province'])) {
$where[] = "province = '".mysql_real_escape_string($_POST['province'])."'";
}
if (isset($_POST['ville']) && strlen($_POST['ville'])) {
$where[] = "ville = '".mysql_real_escape_string($_POST['ville'])."'";
}
if (isset($_POST['vendeur']) && strlen($_POST['vendeur'])) {
$where[] = "vendeur = '".mysql_real_escape_string($_POST['vendeur'])."'";
}
// uniquement les entiers sont acceptés pour les prix
if (isset($_POST['prix']) && isset($_POST['prix1'])
&& ctype_digit($_POST['prix']) && ctype_digit($_POST['prix1']))
{
$where[] = 'prixb BETWEEN '.$_POST['prix'].' AND '.$_POST['prix1'];
}
$target_page = "search-val.php";
$sql_where = (empty($where)) ? null : 'WHERE '.implode(' AND ', $where);
// on compte le nombre total d'enregistrements renvoyés par la requête filtrée
$sql = 'SELECT COUNT(*) AS nbOfRec FROM annonce '.$sql_where;
$qry = mysql_query($sql) or die(mysql_errno().' :: '.mysql_error());
$nb_records = mysql_result($qry, 0, 0);
// on vérifie si la page demandée est dans les limites fixées par la pagination
$nb_items_per_page = 10;
$nb_pages = ceil($nb_records / $nb_items_per_page);
$asked_page = (isset($_GET['page']) && ctype_digit($_GET['page']) && ($_GET['page']))
? (int) $_GET['page']
: 1;
if ($asked_page > $nb_pages) {
// si la page demandée est supérieure au nombre total de pages alors
// page demandée = dernière page
$asked_page = $nb_pages;
}
// on détermine la clause LIMIT du sql à partir des données de pagination
$offset = ($asked_page - 1) * $nb_items_per_page;
$length = $nb_items_per_page;
$sql_limit = "LIMIT $offset, $length";
// on extrait les données à afficher
$sql = "SELECT * FROM annonce $sql_where $sql_limit";
$data = mysql_query($sql) or die(mysql_error());
// PAGINATION //
// je suppose que ton index affiche 10 pages
$index_range = 10;
// détermination des bornes à afficher
if ($nb_pages <= $index_range) {
$index_start = 1;
$index_end = $nb_pages;
}
else
if ($asked_page === 1) {
$index_start = 1;
$index_end = $index_range;
}
else {
$index_start = $asked_page;
$index_end = (($index_start + $index_range) > $nb_pages) ? $nb_pages : ($index_start + $index_range);
}
// affichage des liens spéciaux : Premier Précedent Suivant Dernier
$show_first = ($index_start > 1);
$show_prev = ($asked_page > 1);
$show_next = ($asked_page < $nb_pages);
$show_last = ($index_end < $nb_pages);
// génération des la pagination
$paginate = array();
$paginate[] = '<div class="paginate">';
// lien Premier
if ($show_first) {
$paginate[] = '<a href="'.$target_page.'?page=1">First</a>';
}
// lien Précédent
if ($show_prev) {
$paginate[] = '<a href="'.$target_page.'?page='.($asked_page - 1).'">Previous</a>';
}
// affichage des numéros des pages
for ($i = $index_start; $i <= $index_end; ++$i) {
$paginate[] = ($i === $asked_page)
? '<span class="current">'.$i.'</span>'
: '<a href="'.$target_page.'?page='.$i.'">'.$i.'</a>';
}
// lien Suivant
if ($show_next) {
$paginate[] = '<a href="'.$target_page.'?page='.($asked_page + 1).'">Next</a>';
}
// lien Dernier
if ($show_last) {
$paginate[] = '<a href="'.$target_page.'?page='.$index_end.'">Last</a>';
}
$paginate[] = '</div>';
echo'<table width="100%" bgcolor="#0099FF" class="messagerie" border="0">
<tr>
<td width="10%"><b>N°</b></td>
<td width="20%"><b>Pays</b></td>
<td width="15%"><b>Région</b></td>
<td width="20%"><b>Commune</b></td>
<td width="15%"><b>Type de vente</b></td>
<td width="15%"><b>Prix</b></td>
<td width="5%"><b>Voir</b></td>
</tr></table>';
while($plus = mysql_fetch_assoc($data))
{
$ligne = $data["idA"];
//Affichage l'aannonce
echo'<table width="100%" bgcolor=" '. (($ligne++ % 2)?"#C0F3AB":"#ABEF8D") .'">
<tr>
<td width="10%">'.$plus["ref"].'</td>
<td width="20%">'.$plus["pays"].'</td>
<td width="15%">'.$plus["province"].'</td>
<td width="20%">'.$plus["ville"].'</td>
<td width="15%">'.$plus["vendeur"].'</td>
<td width="15%"><font color="#FF0000"><b>'.$plus["prixb"].'</b></font></td>
<td width="5%"><a href="detail_anno.php?detail='.$plus["idA"].'"><img src="cssstyle/imdesign/oeil.png" width="30" height="30" border="0" /></a></td>
</tr></table>';
}
echo implode(null, $paginate);
include("cssstyle/bas.php");