Affichage de résultats mysql sur plusieurs pages

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 662 fois - Téléchargée 29 fois


Contenu du snippet

bon voilà, demandé par cercleaventure sur le forum, une fonction qui gère l'affichage des liens "page suivante", "précédente", ... pour couper l'affichage du résultat d'une grosse requete
voici un petit exemple pour montrer ma fonction dans ce contexte:

Source / Exemple :


function gestion_pages($d,$l,$lien,$nb_total){
	//$d:		premier enregistrement affiché
	//$l:		nombre d'enregistrements affichés par page
	//$lien:	lien utilisé pour la page actuelle (attention les parametes $d et $l ne doivent pas etre utilisés)
	//$nb_total:	nombre total d'enregistrements

	echo '<table width="100%" cellspacing="0" cellpadding="2" border="0"><tr><td width="33%" nowrap align="left" valign

="bottom">';
	$debut=$d-$l;
	if(substr_count($lien,'?')==0)
		$lien.='?';
	else
		$lien.='&';
	if($debut<0) $debut=0;
	if($d>0){
		echo '<a href="'.$lien.'d=0&l='.$l.'">Première page</a>, ';
		echo '<a href="'.$lien.'d='.$debut.'&l='.$l.'">Page précédente</a>';
	}
	echo '</td><td width="33%" nowrap align="center" valign="bottom">';
	echo ceil($nb_total/$l)-ceil(($nb_total-$d)/$l)+1; //affiche le numéro de la page courante
	echo '/';
	echo ceil($nb_total/$l); //affiche le nb total de pages
	echo '</td><td width="33%" nowrap align="right" valign="bottom">';
	$suiv=$d+$l;
	if($d+$l<$nb_total){
		echo '<a href="'.$lien.'d='.$suiv.'&l='.$l.'">Page suivante</a>, ';
		echo '<a href="'.$lien.'d='.($nb_total-$l).'&l='.$l.'">Dernière page</a>';
	}
	echo '</td></tr></table>';
}

if(!isset($_GET[l])) $_GET[l]=20; //pour avoir que 20 enregistrements par page par exemple
if(!isset($_GET[d])) $_GET[d]=0;  //on affiche en premier l'enregistrement 0 (le premier) par défaut

$req=mysql_query("select * from messages limit $_GET[d], $_GET[l];"); //ça c'est la requete de base pour sélectionner ce 

qu'on va afficher sur la page

$nb_total=mysql_num_rows(mysql_query("select * from messages;")); //cette requete sert à compter le nombre d'enregistrement 

total (pour connaitre le nombre de pages au total)

//$req va contenir tous les enregistrement à afficher
//libre à vous d'en faire ce que vous voulez ici
//un for pour les afficher, ...
//c'est ici que vous gérez votre affichage des résultats

//et en bas, on appelle ma fonction pour afficher les liens suivant la page ou on se trouve

gestion_pages($_GET[d],$_GET[l],$_SERVER['REQUEST_URI'],$nb_total);

Conclusion :


voilà, n'hésitez pas à me poser des questions :p

A voir également

Ajouter un commentaire Commentaires
cs_romualb Messages postés 1 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 28 septembre 2009
28 sept. 2009 à 11:41
j'ai développé une classe qui affiche une liste à partir du résultat d'une requête SQL, avec tri, pagination...
http://www.romualb.com/2009/09/27/144/classe_d_affichage_de_listes.html
jimmywydadi Messages postés 4 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 15 février 2008
1 oct. 2007 à 15:54
bonjour
je voudrais un code premet de faire (Précé [ 1 2 3 4 5 6 7 8 9 ] Suiv)
d'une seul page web
cs_guss Messages postés 2 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 15 mai 2007
15 mai 2007 à 16:04
Bonjour,

Merci pour le code et son optimisation.
J'ai changé une ligne dans le code optimisé de Truemistress.

$html.= ceil($d/$l)+1;//affiche le numéro de la page courante

à la place de :
$html.= ceil($nb_total/$l)-ceil(($nb_total-$d)/$l)+1; //affiche le numéro de la page courante

Bonne Journée
Guss
eax Messages postés 728 Date d'inscription jeudi 20 juin 2002 Statut Membre Dernière intervention 7 novembre 2007 2
27 janv. 2007 à 16:22
oui, c vrai que ça le rend un peu plus propre, merci ...
truemistress Messages postés 1 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 27 janvier 2007
27 janv. 2007 à 12:21
Merci pour ce code très utile.

Par contre, en tenant compte -entre autre- des commentaires postés, je l'ai simplifié et optimisé :
- en remplaçant les '&' par '&'
- en remplaçant les 'nowrap' par 'nowrap="nowrap"'
- en supprimant $lien, par ex : ['.$lien.'d=0&l='.$l.' par ] (cela permet d'avoir une URL qui ne se rallonge pas à chaque action, elle reste constamment du type '?d=xx&l=xx')
- en remplaçant les 'echo' par '&html.= ', ce qui permet de faire un 'return $html;' à la fin de fonction, pour que quand on appelle la fonction ça affiche directement les éléments de navigation, dans n'importe quelle page.
- j'ai remplacé les textes "page suivante", "dernière page" etc.. par des images standards (left_on.gif=une flèche vers la gauche pour le lien "précédente" et 2 flèches vers la gauche pour le lien "première" ; idem avec des fleches vers la droite pour "suivante" et "dernière", avec les textes alternatifs correpondants.
- j'ai rajouté $d = $_GET['d'];

Du coup, cette fonction peut etre copiée et appliquée n'importe où (en changeant juste le nom des images : 'right.on.gif' et 'left_on.gif').

Voici donc la fonction allégée et optimisée que je propose :


function gestion_pages($d,$l,$nb_total){
//$d: premier enregistrement affiché
//$l: nombre d'enregistrements affichés par page
//$nb_total: nombre total d'enregistrements

$html.= '';
$debut=$d-$l;
if($debut<0) $debut=0;
if($d>0)
{
$html.= ' ';
$html.= '';
}
$html.= ', page ';
$html.= ceil($nb_total/$l)-ceil(($nb_total-$d)/$l)+1; //affiche le numéro de la page courante
$html.= '/';
$html.= ceil($nb_total/$l); //affiche le nb total de pages
$html.= ', ';
$suiv=$d+$l;

if($d+$l<$nb_total)
{
$html.= ' ';
$html.= '';
}
$html.= '
';
return $html;
}

//on rajoute ces infos avant sa requete
$d = $_GET['d'];
if(!isset($_GET['l'])) $_GET['l']=4; //pour avoir que 4 enregistrements par page par exemple
if(!isset($_GET['d'])) $_GET['d']=0; //on affiche en premier l'enregistrement 0 (le premier) par défaut

// la requete :
$results = $db->dbQuery("SELECT * FROM nomtable LIMIT ".$_GET['d'].",".$_GET['l']." ");

//appel de la fonction :
$barrenavig = gestion_pages($_GET['d'],$_GET['l'],$nb_total);

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.