[php] explication d'un script de pagination

Fermé
tonguim - 26 oct. 2005 à 21:00
 tonguim - 26 oct. 2005 à 23:41
Bonsoir,

j'ai télécharge un script php, qui doit me permettre de paginer, lors de l'affichage, une liste d'articles stockes dans une base de donnees.

Je ne comprend pas totalement le fonctionnement du script. J'ai pu modifier quelques instructions qui sont me sont simples à comprendre, mais pour modifier le reste, il me faut le comprendre parfaitement. Est ce quelqu'un voudrait bien me le commenter? Merci.

Ci-dessous, le script:

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
	<head>
       <title>Title here!</title>
	</head>	
	<body>
		<?php
			include("connexion.php");	
		
			$query="select * from articles";
			$result = mysql_query($query);

			$nombMaxPage=0;
			//$nombMaxPage = 10; //nombre par page
			$numPageCour = 0; //n° de la fiche courante

			$Ndeb=@$_GET["num"]; //1ère fiche transmise par l'URL

			// tant qu'il y a des fiches
			while (($val = mysql_fetch_array($result)) && ($numPageCour<$nombMaxPage+$Ndeb)) 
			{
   				if($numPageCour>=$Ndeb) 
				{
      				// affiche un champ
      				echo $val["champ"]."<br>";
   				}
   			// une de plus
   			$numPageCour++;
		} ?>

	<br>

	<table cellpadding=3><tr>
	<?php 
	// Navigation: Des fiches avant ?
	if($Ndeb > 0) { ?>
   <td valign=top>
      <A href="?num=<? echo $Ndeb-$nombMaxPage; ?>"
         >Retour</A>
   </td>
<? } ?>
   <td>   
<? // N° des pages
$Npag = ceil(mysql_numrows($result)/$nombMaxPage);
for($i = 1;$i<=$Npag;$i++) {
   // Page courante ?
   if($Ndeb == ($i-1)*$nombMaxPage) { ?>
      Page <? echo $i; ?>
   <? } else { ?>
      <A href="?num=<? echo ($i-1)*$nombMaxPage; ?>"
      > <? echo $i; ?> </A>
   <? }
} ?>
   </td>   
<? // Des fiches après ?
if($val) { ?>
   <td valign=top>
      <A href="?num=<? echo $numPageCour; ?>">Suite</A>
   </td>
<? } ?>
</tr></table>

</body></html>
<? mysql_close(); ?>
?>
</body>
</html>
A voir également:

2 réponses

wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
26 oct. 2005 à 22:15
ben son code est commenté ...

En gros, c'est un gros bourrin. Il sélectionne toute la table et parcourt depuis le début jusqu'à tomber sur son numéro.

Imagine que tu veux afficher tes articles de 50 à 59

Ben tu récupères la page courante (50), puis tu parcours la requête jusqu'à arriver à 50 et la tu affiches tant que 50+ nombre par page (10 dans exemple) n'est pas atteint.

résultat, ben tu a les articles de 50 à 59

Ensuite, si tu n'es pas sur le premier article, tu fait un lien qui va vers l'article courant - le nombre d'article. (Donc 50 -10 = 40) Et qui sera la page précédente. Tout en oubliant de vérifier que le nombre ne devient pas négatif

Puis il affiche toutes les pages suivantes (donc, 10 par 10) jusqu'à épuisement.

etc...



Bref, si tu veux mon avis. C'est bourrin et mal fait.
Imagine que tu as 500 000 articles et que tu vas à la 400 000e. Ben le con de script va parcourir les 399 999 avant d'afficher un truc.

Avec un Limit dans la requête, ça t'épargnera déjà quelques longueurs ...

1
Merci pour ta reponse wiwimagique,
ce que je voudrais en fait, c'est afficher tout le contenu de ma base de données par page (10 articles par page), avec en bas des pages des numeros 1, 2, 3 etc (autant de numeros qu'il doit y avoir de pages) hyperactifs, renvoyant respectivement à la 1ere, 2e, 3e, etc page des artciles affichés. Mon pb se situe au niveau de l'algorithme en fait:

debut

Je fixe le nombre d'articles par page

A l'aide de la commande limite je recupere les articles de ma base de donnees par paquets de 10 et je les affiche dans des pages, jusqu'a ce que tous les articles soient affiches ...

fin
1