<?php
|
/*---------------------------------------------------------------*/
|
/*
|
Titre : Pagination avec controle des résultats
|
|
URL : https://phpsources.net/code_s.php?id=2
|
Date édition : 15 Jan 2005
|
Date mise à jour : 26 Sept 2019
|
Rapport de la maj:
|
- refactoring du code en PHP 7
|
- fonctionnement du code vérifié
|
- maintenance du code
|
*/
|
/*---------------------------------------------------------------*/?>
|
CREATE TABLE IF NOT EXISTS `phpsources_test` (
|
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
`texte` text,
|
PRIMARY KEY (`id`)
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
--
|
-- Données de la table `phpsources_test`
|
--
|
|
INSERT INTO `phpsources_test` (`id`, `texte`) VALUES
|
(1, 'I love PHP'),
|
(2, 'I do PHP'),
|
(3, 'Hello world'),
|
(4, 'Good morning'),
|
(5, 'Good night'),
|
(6, 'Im Free');
|
|
|
<!--
|
Le style des N° affiché dans la barre
|
-->
|
<style>
|
A.on {font-family: tohoma;font-size:13px;color: #626F8F;text-decoration:
|
none; }
|
A.on:hover {font-family: tohoma;font-size:13px;color: #626F8F;text-decoration:
|
underline; }
|
A.off {font-family: tohoma;font-size:13px;color: #626F8F;font-weight:none;}
|
</style>
|
|
<?php
|
|
// RECUPERATION DES VARIABLES GET //
|
//
|
|
$debut = isset($_GET['debut']) ? (int)$_GET['debut'] : 0;
|
if($debut < 0)
|
exit;
|
|
// ------------------------------------------------------------------------
|
// image_html
|
// ------------------------------------------------------------------------
|
function image_html($img, $align = "middle")
|
{
|
$taille = @getimagesize($img);
|
return '<IMG SRC="'.$img.'" '.$taille[3].' BORDER=0 ALIGN="'.$align.'">';
|
}
|
|
|
// ------------------------------------------------------------------------
|
// barre_navigation
|
// ------------------------------------------------------------------------
|
function barre_navigation($nbtotal,
|
$nbenr,
|
$cfg_nbres_ppage,
|
$debut, $cfg_nb_pages
|
)
|
{
|
// --------------------------------------------------------------------
|
global $cfg_nb_pages; // Nb de n° de pages affichées dans la barre
|
|
$lien_on = ' <A HREF="{cible}">{lien}</A> ';
|
$lien_off = ' {lien} ';
|
// --------------------------------------------------------------------
|
|
$query = 'index.php?debut=';
|
$barre = '';
|
|
// début << .
|
// --------------------------------------------------------------------
|
if ($debut >= $cfg_nbres_ppage)
|
{
|
$cible = $query.(0);
|
$image = image_html('left.gif');
|
$lien = str_replace('{lien}', $image.$image, $lien_on);
|
$lien = str_replace('{cible}', $cible, $lien);
|
}
|
else
|
{
|
$image = image_html('left.gif');
|
$lien = str_replace('{lien}', $image.$image, $lien_off);
|
}
|
$barre .= $lien." <B><font color = foe3ae>·</B>";
|
|
|
// précédent < .
|
// --------------------------------------------------------------------
|
if ($debut >= $cfg_nbres_ppage)
|
{
|
$cible = $query.($debut-$cfg_nbres_ppage);
|
$image = image_html('left.gif');
|
$lien = str_replace('{lien}', $image, $lien_on);
|
$lien = str_replace('{cible}', $cible, $lien);
|
}
|
else
|
{
|
$image = image_html('left.gif');
|
$lien = str_replace('{lien}', $image, $lien_off);
|
}
|
$barre .= $lien." <B>·</B>";
|
|
|
// -------------------------------------------------------------------
|
|
if ($debut >= ($cfg_nb_pages * $cfg_nbres_ppage))
|
{
|
$cpt_fin = ($debut / $cfg_nbres_ppage) + 1;
|
$cpt_deb = $cpt_fin - $cfg_nb_pages + 1;
|
}
|
else
|
{
|
$cpt_deb = 1;
|
|
$cpt_fin = (int)($nbtotal / $cfg_nbres_ppage);
|
if (($nbtotal % $cfg_nbres_ppage) != 0) $cpt_fin++;
|
|
if ($cpt_fin > $cfg_nb_pages) $cpt_fin = $cfg_nb_pages;
|
}
|
|
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++)
|
{
|
if ($cpt == ($debut / $cfg_nbres_ppage) + 1)
|
{
|
$barre .= "<A CLASS='off'> ".$cpt." </A> ";
|
}
|
else
|
{
|
$barre .= "<A CLASS='on' HREF='".$query.(($cpt-1)*$cfg_nbres_ppage)."'>".$cpt.
|
"</A> ";
|
}
|
}
|
|
|
// suivant . >
|
// --------------------------------------------------------------------
|
if ($debut + $cfg_nbres_ppage < $nbtotal)
|
{
|
$cible = $query.($debut+$cfg_nbres_ppage);
|
$image = image_html('right.gif');
|
$lien = str_replace('{lien}', $image, $lien_on);
|
$lien = str_replace('{cible}', $cible, $lien);
|
}
|
else
|
{
|
$image = image_html('right.gif');
|
$lien = str_replace('{lien}', $image, $lien_off);
|
}
|
$barre .= " <B>·</B>".$lien;
|
|
// fin . >>
|
// --------------------------------------------------------------------
|
$fin = ($nbtotal - ($nbtotal % $cfg_nbres_ppage));
|
if (($nbtotal % $cfg_nbres_ppage) == 0) $fin = $fin - $cfg_nbres_ppage;
|
|
if ($fin != $debut)
|
{
|
$cible = $query.$fin;
|
$image = image_html('right.gif');
|
$lien = str_replace('{lien}', $image.$image, $lien_on);
|
$lien = str_replace('{cible}', $cible, $lien);
|
}
|
else
|
{
|
$image = image_html('right.gif');
|
$lien = str_replace('{lien}', $image.$image, $lien_off);
|
}
|
$barre .= "<B>·</B> ".$lien;
|
|
|
|
|
// Voila, c'est ici que l'on retourne la barre
|
// --------------------------------------------------------------------
|
|
return($barre);
|
|
// -------------------- FIN FONCTION ------------------------------
|
}
|
|
?>
|
|
|
<?php
|
|
|
// ------------------------------------------------------------------------
|
|
$db_server = 'localhost'; // Adresse du serveur MySQL
|
$db_name = ''; // Nom de la base de données
|
$db_user_login = 'root'; // Nom de l'utilisateur
|
$db_user_pass = ''; // Mot de passe de l'utilisateur
|
|
// Ouvre une connexion au serveur MySQL
|
$conn = mysqli_connect($db_server,$db_user_login, $db_user_pass, $db_name);
|
|
|
// ------------------------------------------------------------------------
|
|
$nom_table = 'phpsources_test'; // Nom de la table
|
$champs = '*';
|
|
// ------------------------------------------------------------------------
|
$cfg_nbres_ppage = 3; // Nombre de réponses par page
|
$cfg_nb_pages = 10; // Nombre de N° de pages affichés dans la barre
|
// ------------------------------------------------------------------------
|
|
|
|
if (!isset($debut)) $debut = 0;
|
|
// recherche des réponses
|
$sql = 'SELECT '.$champs.' ';
|
$sql .= 'FROM '.$nom_table.' ';
|
$sql .= ' ORDER BY id ASC';
|
$sql .= ' LIMIT '.$debut.','.$cfg_nbres_ppage;
|
|
$resultat = mysqli_query($conn, $sql);
|
$nbenr = $resultat->num_rows;
|
|
|
$q = mysqli_query($conn,"SELECT * FROM $nom_table");
|
// compte le nbre de champs
|
$r = $q->num_rows;
|
|
|
$nbtotal = $r;
|
if (empty($nbtotal)) {$nbtotal = $nbenr;}
|
|
|
// plage de réponses
|
$barre_nav = '<TABLE BORDER=0 WIDTH="100%" CELLPADDING=3 CELLSPACING=1>';
|
$barre_nav .= '<TR><TD BGCOLOR="#FFFFFF" WIDTH="35%" ALIGN="left">';
|
$barre_nav .= 'Résultat: <B>'.($debut + 1).'</B> à  <B>'.($debut +
|
$nbenr).
|
'</B>';
|
$barre_nav .= ' sur <B>'.($nbtotal).'</B></TD>';
|
|
|
|
// barre de navigation
|
// background="../NS_medias/bande_bleu.jpg"
|
if($nbtotal>10){$barre_nav .= '<TD ALIGN="center" WIDTH="60%"> ';}
|
if($nbtotal<=10){$barre_nav .=
|
'<TD BGCOLOR="#f8f8f8" ALIGN="center" WIDTH="60%">';}
|
|
if ($nbtotal > $cfg_nbres_ppage)
|
{
|
$barre_nav .= barre_navigation($nbtotal, $nbenr,
|
$cfg_nbres_ppage,
|
$debut, $cfg_nb_pages
|
);
|
}
|
$barre_nav .= "</TD></TR></TABLE>";
|
|
|
// affichage de la barre de navigation
|
|
|
echo $barre_nav;
|
|
|
|
// affichage des données PAR EXEMPLE
|
|
|
while ($row = mysqli_fetch_array($resultat))
|
{
|
echo $row['texte'];
|
}
|
?>
|
|
|
Invité
28 Sept 2019 à 12:24Impeccable, ca fait des jours que je cherche un page par page portable, merci a l'auteur :)
Invité
08 Jan 2011 à 11:46J'ai un petit problème, j'ai modifier un peut le code pour l'adapter, il marche parfaitement a part des deux erreurs bizarre que je cache^^, mais le problème c'est que j'ai une table appeller '19' et ca me donne une erreur, alors que si j'affiche une table qui s'appelle 'B' ça marche.
Dexinou
14 Déc 2008 à 17:45Ce code marche à merveille, j'ai du modifier 2..3 petites choses pour adapter à mon site mais il est tiptop, merci de l'avoir proposer.
Bye
Thegeniusdexter
17 Avril 2008 à 15:11Salut,
Je petit Problème avec le trie de requête dont les codes sont
<code>
// recherche des réponses
$sql = 'SELECT '.$champs.' ';
$sql .= 'FROM '.$nom_table.' ';
$sql .= ' ORDER BY id ASC';
$sql .= ' LIMIT '.$debut.','.$cfg_nbres_ppage;
</code>
Nixi54
31 Jan 2008 à 21:55Tu dois avoir des problèmes avec ta requete.
>> sur le premier $barre . j'ai du elever le point-> $barre
?? pas compris la ???
Johanp
31 Jan 2008 à 15:16Bonjour,
je ne suis pas tres doué mais il y a des p'etites erreurs:
sur le premier $barre . j'ai du elever le point-> $barre
pour les images tu les as mise dans un dossier mais pas pour toutes ->images/
Donc ca c'est pas bien grave car j'ai trouvé tout seul comme un grand...;)
Mais le probleme que je rencontre c'est que mes informations ne changent pas quand je clique sur les liens. Ma page change mais pas les infos j'ai toujours l'ID n°1 et n°2 qui s'affiche et jamais les suivantes.
J'ai rentre 2 affichages par pages.
Si tu pouvez me donner un p'tit coup de pouse ce serait tres gentil.
En tout cas bon boulot.
Merci
KOogar
07 Déc 2007 à 08:39Voila !
je viens de remettre ajour le code en ajoutant une variable qui permet de controler le pas des commandes d'avances rapides (>)
KOogar
Invité
06 Déc 2007 à 18:10Je comprend, l'astuce est la suivante :
Si tu veux avancer par "pas" de 4 pages par exemple,
remplace :
$fin = ($nbtotal - ($nbtotal % $cfg_nbres_ppage));
par
$fin = ($cible+40);
Comme tu peux le voir, 4 pages = 40 entre les (), donc si tu ne veux que 3 pages, tu mettras 30... et ainssi de suite
++
KOogar
Comme cela, ca ressemble bien mieux au page par page de Google ;)
Invité
06 Déc 2007 à 12:46Trés bon code koogar, mais il me semble qu'il y a un petit probléme
PAr exemple je veux afficher 4 liens 1 2 3 4 pour 10 résultats que j'affiche un par un,
Si je me met a la fin donc 7 8 9 10, si je clique sur 9 je vais avoir 6 7 8 9 , donc la tout va bien ainsi de suite jusque 1 , mais si je veux faire ca en remontant 1 2 3 4 si je clique sur 4 apres je ne vais pas avoir 2 3 4 5 :(
Est ce que je me suis bien expliqué???
Donc en remontant on doit utilisé la fleche.
Voila si c'est simple a corriger n'hésite pas je nage un peu dans ton code :(
Mygale
03 Nov 2007 à 18:38Bravo - moi qui suis un tout débutant en php je trouve ce script super - Merci à vous