Pagination php [Résolu/Fermé]

Signaler
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014
-
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014
-
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

Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
18 juillet 2018
1 444
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014

Effectivement c'est ça ! Merci beaucoup de votre aide. Bonne soirée
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
18 juillet 2018
1 444
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.
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014

Mon count n'est pas bon ? :o
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
18 juillet 2018
1 444
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.
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014

D'accord ^^ Merci :)
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
18 juillet 2018
1 444
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 ?
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014

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
}
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014

suivant* pour le premier dsl
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
18 juillet 2018
1 444
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
}
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014

J'y regarde demain, je ne connaissais pas "floor".
Merci de m'accorder du temps ;)
Messages postés
8319
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
18 juillet 2018
1 444
c'est une fonction mathématique floor($nb) donne l'entier inférieur et ceil($nb) l'entier supérieur
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014

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();
Messages postés
83
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
9 juillet 2014

PS : A noter que j'ai mis : $nb_page = floor($requete2/10); car $donnee2 étant de type tableau je m'etais trompé.