Affichage dynamique des resultats d'une requete mysql sur plusieurs pages

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 349 fois - Téléchargée 32 fois

Contenu du snippet

Ce script permet un affichage dynamique des resultats d'une requête sur plusieurs pages avec les liens vers les autres pages ainsi qu'un lien pg suivante et pg précédente. On choisit le nb de resultats affichés par page

Source / Exemple :


<?php
//(C) Grapsus: grapsus@hotmail.com
//c'est un morceau de code, c'est pour cette raison qu'il n'y a pas de balises html
//ce script est totalement libre, vous pouvez en faire ce que vous voulez ;-)
// /!\ pour que ca marche register_globals doit etre à "on" dans php.ini

//$pg est la variable qui indique sur quelle page se trouve l'utilisateur
//si par exemple vous affichez 10 resultats par page et que $pg=2, on affciche
//les resultats de 11 à 20...
//sur la page 3, de 21 à 30... etc

//on verifie si la variable $pg est definie, sinon on l'initialise a 1
if(!isset($_GET['pg'])){
	$pg = 1;
}else{
	$pg = $_GET['pg'];
}

//on verifie si la variable qui est censcée etre un numero de page est bien un chiffre,
//cela evite qu'un gogole vous pirate avec une injection mysql
if(!is_numeric($pg)){
	$pg = 1;
}

//connexion mysql
$link = mysql_connect("localhost", "root", "")or die("Erreur de connexion: ".mysql_error($link));
//chois d'une bdd
mysql_select_db("test", $link)or die("Erreur de connexion: ".mysql_error($link));

//c'est le nb d'enregstrements à affiche par page:
$enreg_par_pg = 10;

//fonction qui affiche les liens vers les autres pages, ainsi que les liens page suivante et page precedente:
function pgs($enreg_par_pg, $pg, $link){
//c'est la requete qui doit permettre le nombre de résultats total qui va etre reparti sur plusieurs pages
	$res = mysql_query("SELECT * FROM table", $link)or die("Erreur MySQL: ".mysql_error($link));
	$nb_enreg = mysql_num_rows($res);
	//on calcule le nb de pages
	$nb_pg_rounded = ceil( $nb_enreg / $enreg_par_pg );	
	//numero de page precedente
	$pp = $pg - 1;
	//numero de la page suivante
	$ps = $pg + 1;
	
	//si l'utilisateur se se trouve pas a la page n°1
	if($pg != 1){
		//on affiche un lien page précedente
		//si votre script a besoin d'autre variable pour fonctionner n'oublier pas des les transmettre en ajoutant &var=$var...
		echo "<a href='?pg=$pp'><<page précédente</a>";
	}
	
	//definition d'une variable pour la boucle
	$i=1;
	
	//la syntaxe do...while permet d'effectuer la boucle au moins une fois!
	do{
		//si $i n'est pas egal au numero de la page sur laquelle se trouve l'utilisateur...
		if($i != $pg){
			//...on affiche un lien vers cette page
			//idem: si votre script a besoin d'autre variable pour fonctionner n'oublier pas des les transmettre en ajoutant &var=$var...
			echo "&nbsp;<a href='?pg=$i'>$i</a>\n";
		}else{
			//...sinon on affiche simplement le n°  de la page actuelle
			echo "&nbsp;$i&nbsp;";
		}
	//incrémentation de la viariable de la boucle
	$i++;
	//on recommence tant que $i n'atteint pas le numero de la derniere page
	}while($i <= $nb_pg_rounded);
	
	//si l'utilisateur n'est pas a la derniere page...
	if($pg != $nb_pg_rounded){
		//...on affiche un lien page suivante
		//idem: si votre script a besoin d'autre variable pour fonctionner n'oublier pas des les transmettre en ajoutant &var=$var...
		echo "&nbsp;<a href='?pg=$ps'>page suivante>></a>";
	}
}

//ici on calcule à partir de quel enregistrement il faut afficher $enreg_par_pg résultats
$limit = $enreg_par_pg*$pg-$enreg_par_pg;

//c'est la requete qui selectione $enreg_par_pg resultats
$req = mysql_query("SELECT * FROM table LIMIT $limit, $enreg_par_pg")or die("Erreur MySQL: ".mysql_error($link));

//
//ici c le code qui affiche les resulatats de votre requete, tout depend du script
//par exemple:
//while($tab = mysql_fetch_assoc($req)){
//echo $tab["champ"];
//echo "<br>";
//}

//on appele la fonction précédament créée pour afficher les liens vers les autres pages, vous pouvez l'appeler plusieurs fois s'il le faut
echo "<br>";
pgs($enreg_par_pg, $pg, $link);
?>

Conclusion :


Voila j'ai essayé de faire ce bout de code le plus complet possible, si vous avez des remarques, dites le. Et lisez bien les commentaires

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de cs_seyev

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.