Pagination php

Résolu
Bonjour,

J'ai effectué un système de pagination avec 10 articles par page ... Cependant je n'arrive pas à faire en sorte de ne plus afficher le "Suivant" Si le nombre d'articles est supérieur à la page correspondante. Pour la première page le "Précédent" à disparu, mais pour le "Suivant" rien à faire ...

Je m'explique :
Comme la première page = 0 (récupéré dans l'url), si le nombre d'article (requête count) > (((page+1)*10)+1) soit pour la page 0 : 11, pour la page 1 : 21
Or j'ai 21 articles et sur la page 2 il m'affiche Précédent et Suivant

Merci de votre aide!

Voici le code :

if(isset($_GET['page']) && $_GET['page']>=0)
{
        $page=$_GET['page'];
}
else
{
        $page=0;
}
$precedente=$page-1;
$suivante=$page+1;
mysql_connect($hôte, $utilisateur, $mPasse);
mysql_select_db($nomBase);
$sql2="select count(id)from article";
$requete2=mysql_query($sql2) or die ('Erreur sql !');
$donnee2=mysql_fetch_array($requete2);

if($donnee2>=((($page+1)*10))+1) /*dernière page*/
{
	if($page<=0) /*première page*/
	{
		echo"<a href=\"blog.php?page=$suivante\"><center><font color=\"white\">Suivante >></font></center></a>";
	}
	else
	{
		echo"<a href=\"blog.php?page=$precedente\"><center><font color=\"white\"><< Précédente</a></font></center> ... <a href=\"blog.php?page=$suivante\"><center><font color=\"white\">Suivante >></font></center></a>";
	}
}
else
{
	if($page<=0)
	{
		echo"";
	}
	else 
	{
		echo "<a href=\"blog.php?page=$precedente\"><center><font color=\"white\"><< Précédente</a></font></center>";
	}
}

mysql_close();


8 réponses

  1. Contributeur
    Commence par faire un count pour savoir combien d'articles tu auras, comme ça avec un petit calcul tu sais combien de pages tu auras, et tu n'affiches plus le "suivant" sur la dernière.
    1. Contributeur
      Pour être honnête j'ai lu ton explication et je n'ai pas regardé le code, pensant que tu n'avais juste pas fait ce que j'ai mentionné.
      Je regarde ton code et j'édite.
      1. D'accord ^^ Merci :)
    2. Contributeur
      Je n'aurais pas fait comme toi.
      Tu as 21 éléments, tu devrais avoir 3 pages si tu as 10 éléments par page, non ?

      1 -> 10
      11 -> 20
      20 -> 21

      après mon count j'aurais calculé le nombre de page que je vais avoir, à savoir 3, et ensuite tu affiches le précédent si tu n'es pas dans la page 0, puis tu affiches "suivant" si $page<$nbpages

      un truc du genre...

      tu me suis ?
      1. Je devrais avoir 3 pages en effet mais d'indice 0, 1 et 2 voila pourquoi j'ai dis 2 (la valeur de la page dans l'url) ^^

        Si je suis votre raisonnement cela donnerai (après le count) le nombre de pages total serait égal au résultat du count divisé par 10, Comme ceci ? :

        $nb_page = $donnee2 / 10;

        if ($page==0)
        {
        précédent (pour faire simple)
        }
        else if ($page<$nb_page)
        {
        précédent et suivant
        }
        else if ($page == $nb_page)
        {
        précédent
        }
        1. suivant* pour le premier dsl
      2. Contributeur
        il faut la valeur supérieure pour avoir le nombre de pages
        $nb_page = ceil($donnee2/10);
        edit : (oups, avec ta logique, c'est pas un ceil, mais un floor)

        et si tu fais ça, ça devrait suffire :

        if ($page==0)
        {
        précédent (pour faire simple)
        }
        if ($page<$nb_page)
        {
        suivant
        }
        1. J'y regarde demain, je ne connaissais pas "floor".
          Merci de m'accorder du temps ;)
        2. Contributeur
          c'est une fonction mathématique floor($nb) donne l'entier inférieur et ceil($nb) l'entier supérieur
      3. Bonjour, j'ai essayé votre méthode et cela fonctionne sauf que, le nombre de page compté est 1 alors que je devrais avoir 2 (0,1,2) car j'ai 21 articles ... je ne comprends pas :/
        J'ai fais un echo, celui ci m'affiche :
        -Pour la page 0 : "page : 0 nb page : 1" + suivante
        -pour la page 1 : "page : 1 nb page : 1" + précédente
        -(pas accès à la page 2 de ce fait)

        MERCI. Voila le code

        if(isset($_GET['page']) && $_GET['page']>=0)
        {
        $page=$_GET['page'];
        $article=$page*10;
        }
        else
        {
        $article=0;
        $page=0;
        }
        $precedente=$page-1;
        $suivante=$page+1;
        mysql_connect($hôte, $utilisateur, $mPasse);
        mysql_select_db($nomBase);
        $sql2="select count(id)from article";
        $requete2=mysql_query($sql2) or die ('Erreur sql !');
        $donnee2=mysql_fetch_array($requete2);
        $nb_page = floor($requete2/10); 
        echo "page : $page </br> nb page : $nb_page";
        if ($page==0) 
        { 
        echo"<a href=\"blog.php?page=$suivante\"><center><font color=\"white\">Suivante >></font></center></a>";
        } 
        else if ($page<$nb_page) 
        { 
        echo"<a href=\"blog.php?page=$precedente\"><center><font color=\"white\"><< Précédente</a></font></center> ... <a href=\"blog.php?page=$suivante\"><center><font color=\"white\">Suivante >></font></center></a>";
        } 
        else if ($page == $nb_page) 
        {
        echo "<a href=\"blog.php?page=$precedente\"><center><font color=\"white\"><< Précédente</a></font></center>";
        }
        mysql_close();
        1. PS : A noter que j'ai mis : $nb_page = floor($requete2/10); car $donnee2 étant de type tableau je m'etais trompé.
      4. Contributeur
        Il faut contrôler ce qu'il y a dans les variables, via des echo ou des var_dump, histoire de cibler ou se situe le problème.

        A chaque fois qu'on met une valeur dans une valeur qui peut poser soucis, on l'affiche histoire d'être certain de savoir ce qui se passe et à quel moment.

        Là je pense qu'il faudrait faire
        $nb_page = floor($donnee2[0]/10);
        1. Effectivement c'est ça ! Merci beaucoup de votre aide. Bonne soirée