La pagination (affichage par page)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 324 fois - Téléchargée 32 fois

Contenu du snippet

Petit cours simple sur la pagination

Source / Exemple :


Article pour AZ-PHP.COM

A travers les exercices précédent, vous avez appris à créer par exemple un livre d'or ou un annuaire pour les exos les plus marquants. Une question qui n'a pas été abordé est celle du nombre de réponse. Imaginer que dans votre livre d'or par exemple, vous ayez une cinquantaine de message. Afficher 50 messages sur une page va sûrement vous faire une page trop longue en contenue et à charger. Il vous faut donc répartir vos 50 messages sur plusieurs pages. Pour cela nous allons donc utiliser l'affichage par pages qu'on peut également appeler une barre d'affichage.

Nous allons donc utiliser le cours n°18 ( construction d'un livre d'or ) pour maîtriser l'affichage par pages.

Il nous suffit donc de modifier ( seulement ! ) la page accueil.php ; Le texte qui est en gras est celui qui a été rajouter/modifier au fichier accueil.php

<?
//----------------------------------------------------------------
//
// Page d'affichage des messages
//
//----------------------------------------------------------------

$mysql_host = 'localhost'; // entrer vôtre hote ici
$mysql_user = 'votre login'; // entrer vôtre login
$mysql_password = 'password'; // entrer vôtre password
$mysql_base = 'le nom de vôtre base de donnée'; // entrer le nom de votre base

//----------------------------------------------------------------

// Déclaration des variables
$nb_rep_pages=5; // Nombre de réponses par pages

//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

//selection de vôtre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion
base");

// Initialisation des variables
if(empty($page)) $page = 1;
if(empty($fin)){
$sql = "select count(*) as qte from livre_tbl";
$p = @mysql_query($sql,$db);
$fin = @mysql_result($p,"0","qte");
}

// Déclaration de la variable début
$debut = ($page - 1) * $nb_rep_pages;

//la requète de selection des messages
$req = mysql_query("SELECT date,pseudo,email,message from livre_tbl Order by date_verif Desc LIMIT $debut,$nb_rep_pages ") or die ("erreur requete");

// Ici on calcul le nombre de page
$nbpages = ceil($fin / $nb_rep_pages); // Ici on arrondi

// Affichage par page :)
for($i = 1;$i <= $nbpages;$i ++){
echo "<font size='1' face='verdana' color='#000000'><a href=\"?page=$i&fin=$fin\">Page $i</a></font>";
if($i < $nbpages) echo " - ";
}

//on ressort le contenu en boucle, et on stock dans un tableau avec mysql_fetch_array
while( $contenu = mysql_fetch_array ($req))
{

//on affiche le résultat
print 'Posté le : '.$contenu[date].'<br>';
print 'Auteur : <a href="mailto:'.$contenu[email].'">'.$contenu[pseudo].'</a><br>';
print 'Message : <br>'.$contenu[message].'<br>';
print '<hr>';

}

//on referme la connexion
mysql_close();

//----------------- FIN DU SCRIPT --------------------------------

?>

Voila :) c'est finit ! Comme vous le voyez, c'est tous simple.. En cas de problème ya le forum ;-)

Conclusion :


Bonne ProG !

A voir également

Ajouter un commentaire

Commentaires

cs_cress
Messages postés
2
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
10 juin 2004
-
bonjour, j'ai essayé d'intégrer ce code dans le mien. J'arrive bien à visualiser la première page avec le nb de champ souhaité et les liens vers le nombre de pages nécessaires se créent aussi. Cependant lorsque je sélectionne un lien mes résultats de recherhce sont nuls car mes critères dans ma Zséquence sql (dans le where) sont perdus. J'ai essayé de passer mes critères par url mais sans succés. Pouvez-vous m'aider?

merci
Destrucwar
Messages postés
1
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
26 juin 2004
-
slt,
sur ce script est il possible d'ajouter un bout de code permettant d'aller a la page precedente ??
Merci
anouartepdr
Messages postés
11
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
je vous conseil d' executer cet exercie dabord la base sur mysql puuis inmplementer ce sode php comme il est et tu vas bien comprendre
//////////////
CREATE TABLE vaches (
id int(11) NOT NULL auto_increment,
surnom varchar(50) NOT NULL default '',
prenom varchar(20) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;

INSERT INTO vaches VALUES (1, 'Qui aime les frites', 'Margueritte');
INSERT INTO vaches VALUES (2, 'Belle clochette', 'Roussette');
INSERT INTO vaches VALUES (3, 'La starlette', 'Blanchette');
INSERT INTO vaches VALUES (4, 'Petite Pataude', 'Noireaude');
INSERT INTO vaches VALUES (5, 'Toujours chouette', 'Paquerette');
INSERT INTO vaches VALUES (6, 'Tête de linotte', 'Cowpilot');
INSERT INTO vaches VALUES (7, 'Qui saute partout', 'Kancowroo');
INSERT INTO vaches VALUES (8, 'La gentille', 'Cowchenille');
INSERT INTO vaches VALUES (9, 'Le plus bizarre des cows', 'Haricow');

//////////////////////////////////////////////////
<html>


//=========================================
// includes du fichier fonctions
//=========================================
<?php
function displayNextPreviousButtons($limite,$total,$nb,$page) {
$limiteSuivante = $limite + $nb;
$limitePrecedente = $limite - $nb;
echo ''.\"\n\";
if($limite != 0) {
echo ''."\n";
echo '<form action="'.$page.'" method="post">'."\n";
echo ''."\n";
echo ''."\n";
echo '</form>'."\n";
echo ', '.\"\n\";
}
if($limiteSuivante < $total) {
echo ''."\n";
echo '<form action="'.$page.'" method="post">'."\n";
echo ''."\n";
echo ''."\n";
echo '</form>'."\n";
echo ', '.\"\n\";

}
echo '
'."\n";
}


function affichePages($nb,$page,$total) {
$nbpages=ceil($total/$nb);
$numeroPages = 1;
$compteurPages = 1;
$limite = 0;
echo ''.\"\n\";
while($numeroPages <= $nbpages) {
echo ''.$numeroPages.', '.\"\n\";
$limite = $limite + $nb;
$numeroPages = $numeroPages + 1;
$compteurPages = $compteurPages + 1;
if($compteurPages == 10) {
$compteurPages = 1;
echo '
'.\"\n\";
}
}
echo '
'."\n";
}

//récupération de $limite
if(isset($_GET['limite']))
$limite=$_GET['limite']; else $limite=0;

function verifLimite($limite,$total,$nombre) {
// je verifie si limite est un nombre.
if(is_numeric($limite)) {

// si $limite est entre 0 et $total, $limite est ok
// sinon $limite n'est pas valide.
if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
// j'assigne 1 à $valide si $limite est entre 0 et $max
$valide = 1;
}
else {
// sinon j'assigne 0 à $valide
$valide = 0;
}
}
else {
// si $limite n'est pas numérique j'assigne 0 à $valide
$valide = 0;
}
// je renvois $valide
return $valide;
}



?><?php

//=========================================
// information pour la connection à le DB
//$host 'localhost';
$user = 'root';
$pass = '';
$db = 'test';

//=========================================
// initialisation des variables
//=========================================
// on va afficher 5 résultats par page.
$nombre = 5;
// si limite n'existe pas on l'initialise à zéro
if (!$limite) $limite = 0;
// on cherche le nom de la page.
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];

//=========================================
// connection à la DB
//$link mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

//=========================================
// requête SQL qui compte le nombre total
// d'enregistrements dans la table.
//$select 'SELECT count(id) FROM vaches';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];

//=========================================
// vérifier la validité de notre variable
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite) {
$limite = 0;
}
//=========================================
// requête SQL qui ne prend que le nombre
// d'enregistrement necessaire à l'affichage.
//$select 'select prenom,surnom FROM vaches ORDER BY prenom ASC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

//=========================================
// si on a récupéré un resultat on l'affiche.
//=========================================
if($total) {
// début du tableau
echo ''.\"\n\";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '----
';
echo 'Prénom, ';
echo 'Surnom, ';
echo ''.\"\n\";
// lecture et affichage des résultats sur 2 colonnes
while($row = mysql_fetch_array($result)) {
echo '----
';
echo ''.$row['prenom'].', ';
echo ''.$row['surnom'].', ';
echo ''.\"\n\";
}
echo '
'."\n";
}
else echo 'Pas d\'enregistrements dans cette table...';
mysql_free_result($result);

//=========================================
// si le nombre d'enregistrement à afficher
// est plus grand que $nombre
//=========================================
if($total > $nombre) {
// affichage des liens vers les pages
affichePages($nombre,$page,$total);
// affichage des boutons
displayNextPreviousButtons($limite,$total,$nombre,$page);
}
?>

</html>
trackercheese
Messages postés
11
Date d'inscription
mercredi 26 mars 2003
Statut
Membre
Dernière intervention
23 janvier 2014
-
Bonjour, je recherchais un script comme celui en haut de page mais avec en plus les fonctions Page suivantes, Page précédentes, je m'explique:

sur le resultat d'une requette on affiche
1 - PAUL
2 - PIERRE
3 - JACQUES
4 - ANDRE
5 - DEBILO
6 - ARTHUR
7 - COUET
......ETC
ET COMME AU TOTAL, LE RESULTAT CONTENAIT PLUS DE 3000 ENREGISTREMENTS, A RAISON DE 3 ENREGISTREMENTS AFFICHEE PAR PAGE, CA FAISAIT PLUS DE 1000 PAGES...

Et bein, tu va pas me croire... ON AVAIT + DE 1000 LIENS VERS LES PAGES. :-O

Donc du coup j'ai un peu modifier le truc et en bas de chaque page, on a maintenant:

1 2 3 4 5 >> si je clique sur le >>, on a :
<< 6 7 8 9 10 >> etc etc

C'est un peu mieux non?
voila, je vous donne le truc...

// EN LOCAL, TU METS ICI LE NOM DE TA BASE,TES PARAMETRES ET TOUT KOI......
// ah oui, dans l'exemple, on a une table id composée d'un champ id auto incrementé et d'un champ nom

define ('DB_HOST','localhost');
define ('DB_USER','root');
define ('DB_BASE','NOM DE TA BASE');
define ('DB_PASSWORD','');

// ON SE CONNECTE A MYSQL
$track=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die(''.mysql_error());
// ON CHOISI LA BASE
mysql_select_db(DB_BASE,$track) or die(''.mysql_error());



//----------------------------------------------------------------

// Déclaration des variables
// ICI TU CHANGES LES VALEURS SI TU VEUX, LA PREMIERE VARIABLE N'A PAS CHANGE PAR RAPPORT AU 1ER SCRIPT, LA DEUXIEME C POUR PARAMETRER LE NOMBRE DE LIEN VERS LES PAGES QUE TU VEUX AFFICHER EN MEME TEMPS...BON FORCEMENT, SI TU METS 1000, CA SERT A RIEN QUE JE ME SOIS DECARCASSER!!!

$nb_rep_pages=1; // Nombre de réponses par pages
$nb_liens_pages=4; // Nombre de liens vers les pages en bas de page

// Initialisation des variables
if(empty($page)) $page = 1;
if(empty($fin)){
$sql = "SELECT COUNT(*) as qte FROM id";
$p = mysql_query($sql,$track);
$fin = mysql_result($p,"0","qte");
}

// Déclaration de la variable début
$debut = ($page - 1) * $nb_rep_pages;

//la requète de selection des messages
$req = mysql_query("SELECT id,nom from id Order by id Asc LIMIT $debut,$nb_rep_pages ") or die ("erreur requete");

// Ici on calcul le nombre de page
$nbpages = ceil($fin / $nb_rep_pages); // Ici on arrondi


//on ressort le contenu en boucle, et on stock dans un tableau avec mysql_fetch_array
while( $contenu = mysql_fetch_array ($req)){
//on affiche le résultat
print 'ID : '.$contenu[id].'
';
print 'NOM : '.$contenu[nom].'
';
print '<hr>';
print '
';
}

// Affichage par page :)
if(empty($pointeur)) $pointeur = 1;

if ($pointeur - $nb_liens_pages >= 1){ //Test s'il reste des pages a afficher avant, auquel cas on affiche le << pour 'precedent'
$c = $pointeur - $nb_liens_pages;
echo " << ";
}

for($i = 1 ;$i <= $nb_liens_pages ;$i++){ //Boucle pour les 'nb_liens_pages' liens a afficher
$j=($pointeur+$i)-1;
if ($j <= $nbpages){
echo "$j";
echo " ";

}
}

if ($pointeur + $nb_liens_pages <= $nbpages){ //Test s'il reste des pages a afficher apres, auquel cas on affiche le >> pour 'suivantes'
$b = $pointeur + $nb_liens_pages;
echo " >> ";
}

//on referme la connexion
mysql_close();

//----------------- FIN DU SCRIPT --------------------------------




Si ya des probs, sdewevre@tiscali.fr.
Passez voir mon site aussi ! : http://trackercheese.free.fr
milkasoprano
Messages postés
239
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
1 juillet 2007
-
lol clair moi jai testé je suis pareil que CRESS ! ya un sacré bug et je voudrai ajouté un where sa merde

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.