NUMÉROS DE PAGE

cs_BeCaSiNe Messages postés 80 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 16 juin 2008 - 27 juin 2004 à 16:17
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013 - 8 avril 2013 à 14:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24067-numeros-de-page

VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
8 avril 2013 à 14:03
Salut,

j'arrive un peu tard :p

Excellent mais cependant il y a un petit problème. Exemple, j'ai 8 pages en tout, et quand j'arrive à la 8eme page, ça continue de paginer à la 9eme, 10eme etc.. et bien entendu la 9eme, 10eme etc.. sont vides.

Ca aurait été bien de pouvoir mettre un système de blocage quand ça arrive à la fin.
260686 Messages postés 1 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 27 juillet 2010
27 juil. 2010 à 13:24
Waoww
Merci coockiesch,
Juste une petite information : en pgsql on change
"SELECT * FROM table LIMIT $start, $nb_results_p_page"
en
"SELECT * FROM table LIMIT $nb_results_p_page OFFSET $start"
cdie Messages postés 31 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 12 février 2012 2
5 mai 2010 à 16:12
Nikel, exactement ce que je cherchais ! Merci :)
staykool Messages postés 1 Date d'inscription mercredi 30 août 2006 Statut Membre Dernière intervention 16 mai 2007
16 mai 2007 à 05:21
electroweb, est-ce que tu as mis le code dans une classe finalement?

Moi j'ai ajouter un peu de style sur l'affichage et j'utilise aussi mysqli au lieu de mysql... Je vous en fait donc part! j'espère que tout sera beau... c'est la première fois que je répond à un commentaire! :o))

$nb_results_p_page = 1; // nombre de résultats par page
$nb_avant = 3; // nombre de page avant la page courante
$nb_apres = 3; // nombre de page après la page courante
$premiere = 1; // aficher le lien "première page" (1 ou 0)
$derniere = 1; // afficher le lien "dernière page" (1 ou 0)
$courant = empty($_GET['page']) ? 1 : $_GET['page']; // page
$start = ($courant - 1) * $nb_results_p_page; // start (requete mysql)

// comptage du nombre de lignes de la base
$sqlSelectUser = "SELECT count(id_user) FROM user";
$resSelectUser = $mysqli->query($sqlSelectUser);
$nb_user = $resSelectUser->fetch_array();

// nombre de lignes
$nb_results = $nb_user[0];

// nombre total de pages
$nb_pages = ceil($nb_results / $nb_results_p_page);

// nombre de pages avant
$avant = $courant > ($nb_avant + 1) ? $nb_avant : $courant - 1;

// nombre de pages après
$apres = $courant <= $nb_pages - $nb_apres ? $nb_apres : $nb_pages - $courant;

echo '

';

// première page
if($premiere && $courant > 1)
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . ' Première] </li>';
else
echo '<li class="disablepage">Première</li>';

// page précédente
if($courant > 1)
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant - 1) . ' Précédente] </li>';
else
echo '<li class="disablepage">Précédente</li>';

// affichage des numéros de page
for($i = $courant - $avant; $i <= $courant + $apres; $i++)
{

// page courante
if($i == $courant)
echo '<li class="currentpage">' . $i . '</li>';
else
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . '?page=' . $i . ' ' . $i . '] </li>';
}

// page suivante
if($courant < $nb_pages)
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant + 1) . ' Suivante] </li>';
else
echo '<li class="disablepage">Suivante</li>';

if($derniere && ($courant < $nb_pages))
echo '<li>[' . $_SERVER['SCRIPT_NAME'] . '?page=' . $nb_pages . ' Dernière] </li>';
else
echo '<li class="disablepage">Dernière</li>';

echo '


Page '.$courant.' sur '.$nb_pages.'
';

===============
CSS
===============

.pagination {padding: 2px;}
.pagination ul {margin: 0; padding: 0; text-align: left; font-size: 16px;}
.pagination li {list-style-type: none; display: inline; padding-bottom: 1px;}
.pagination a, .pagination a:visited {padding: 0 5px; border: 1px solid rgb(0,51,102); text-decoration: none; color: #2e6ab1;}
.pagination a:hover, .pagination a:active {border: 1px solid #2b66a5; color: #000; background-color: lightblue;}
.pagination li.currentpage {font-weight: bold; padding: 0 5px; border: 1px solid navy; background-color: rgb(0,51,102); color: #FFF;}
.pagination li.disablepage {padding: 0 5px; border: 1px solid rgb(145,145,145); color: #929292;}
.pagination li.currentpage, .pagination li.disablepage { /*IE 6 and below. Adjust non linked LIs slightly to account for bugs*/ margin-right: 5px; padding-right: 5px;}
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
15 oct. 2006 à 10:24
Salut!
Que la pagination... :-)

C'est à toi de faire l'affichage de tes données! Je l'air pas fait car c'était pas le but de la source et ça change trop d'un cas à l'autre...

@++

R@f
poiutyh Messages postés 3 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 13 octobre 2006
13 oct. 2006 à 14:11
euh d'accord j'ai a peu près compris le script mais si je colle ca cela ne m'affiche que la pagination ??

Ou se passe l'affichage des données de la tables ?
stef1589 Messages postés 44 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 27 mars 2008
31 juil. 2006 à 22:05
super! ca m a beaucoup servi, merci
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
29 avril 2006 à 14:42
Salut!
Oui, en effet, je pense que ton idée est très bien! :)
( de même que la requête de recherche peut être stockée en session en ajoutant juste le LIMIT à chaque fois )

@++

R@f
cs_YeahYeahYeahs Messages postés 13 Date d'inscription lundi 28 juin 2004 Statut Membre Dernière intervention 22 juin 2005
29 avril 2006 à 00:07
Salut, j'ai cogité un moment sur ta très bonne source (merci).
Le problème c'est la double requête sur chaque page...(ça m'ennuie). De plus,ça m'arrange pas car je pense faire une recherche via un formulaire methode post.

Que penses-tu de l'utilisation de variables de sessions pour stocker le résultat du count et le mot-clé recherché?

Sinon il y a la soluce d'Anthomicro mais ça demande un remaniement complet de la bdd.
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
19 mars 2006 à 16:41
Et ben voilà un pb résolu sans moi, :) :D

@++

R@f
cs_villou Messages postés 2 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 17 mars 2006
17 mars 2006 à 12:51
Je viens de comprendre qu'il faut mettre le ORDER BY avant LIMIT...

Donc a la place de

// exemple de requete
$result = mysql_query("SELECT * FROM table LIMIT $start, $nb_results_p_page");

il faut mettre

// exemple de requete
$result = mysql_query("SELECT * FROM table order by ID desc LIMIT $start, $nb_results_p_page");
cs_villou Messages postés 2 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 17 mars 2006
17 mars 2006 à 00:07
Bonsoir !

Vraiment bien ce code, mais j'ai tout de même une petite question. Je suis débutant en php et j'aimerai savoir comment je pourrais faire pour afficher, à l'aide de ce script, les news en sens inverse. Donc le plus grand ID est affiché à la page 1...

Merci pour votre aide !
bebebof Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 15 mars 2006
15 mars 2006 à 21:35
Bonsoir !

Un grand bravo à cookiesch pour la rapidité avec laquelle il a résolu mon problème avec ce script !

super sympa !
un excellent script !
A++
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
13 mars 2006 à 20:29
Hum...
Tu arrives à me montrer comment et où tu as mis mon code?

@++

R@f
bebebof Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 15 mars 2006
13 mars 2006 à 18:18
bonjour,

url de la page 2 : mapage.php?page=2

J'ai fais des tests et j'ai remarqué que dans la requete (ligne 22) si l'on met pas de WHERE ca fonctionne, et dès que l'on met un WHERE, la première page est ok puis les pages suivantes sont vides. Est-ce normal ? ou un defaut de mon script ? faites le test, vous verrez.
Merci pour votre aide, ce script est bien et je sais par expérience que le plus gros bug est souvent le developpeur!
Merci pour votre réponse !
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
13 mars 2006 à 17:21
Salut!
Quand tu es sur ta page deux, après avoir cliqué, quelle est l'url?
Où as tu mis mon code?

@++

R@f
bebebof Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 15 mars 2006
12 mars 2006 à 23:19
bonjour,
pas mal mais j'arrive pas à le faire marcher comme il faut. j'affiche le résultat sur 4 colonnes et 12 par page soit 3 lignes de 4 enregistrements. sur la première page c'est ok, mais dès que je clique sur page 2 j'ai plus rien...
Quelqu'un à une solution ?

Merci !
cs_DyMoN Messages postés 6 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 9 juin 2005
26 janv. 2006 à 15:00
C'est ce que j'ai fait ,

Si yavait plus souvent des sources bien presentéés et bien explicite comme celle ci sa serait cool.
merci encore..
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
25 janv. 2006 à 20:32
Salut!
Include n'est pas une fonction dangereuse en soi quand on est sûr de la page qu'elle appelle.
Par exemple: include('pages.php'); n'est pas du tout dangereux...

Mais si tu fais:
include( $_GET['page'] );
Là, c'est dangereux car si quelqu'un appelle ta page comme ceci:
index.php?page=http://www.unautresite.com/script.php
Et ben ca exécutera le script qu'il veut. On appelle ca la faille des includes!

Si tu veux faire un truc genre pseudo frames, tu passes une valeur dans l'url pour page ( genre: news, contacts, livreor ) et selon cette valeur tu inclut la page que tu veux ( via un switch, par exemple ).

Ca répond à ta question?

@++

R@f
cs_DyMoN Messages postés 6 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 9 juin 2005
25 janv. 2006 à 18:38
C bon j'ai reussi à l'integrer
je n'avait pas vu la ligne:

// exemple de requete
$result = mysql_query("SELECT * FROM table LIMIT $start, $nb_results_p_page");

C'est ce qui posé probleme avec ma requete.

Merci pour ton code tres bien presenté et qui m'aide enormement.

Derniere question:
J'ai mis ce bout de con dans un fichier
et je l'ai inclu dans ma page avec la fonction include();

J'ai entendu parlé que cette fonction etait dangereuse.
Y'a til une autre façon d'apeller cette page ?

Je c'est que sa sort du contexte mais bon..

Encore merci
cs_DyMoN Messages postés 6 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 9 juin 2005
25 janv. 2006 à 17:59
Ceci est trés bien détaillé c'est exactement ce qu'il me faut mais le probleme est que :
Comment l'integrer a ma page ?

Je l'ai integre cela apparait parfaitement mais pas le resultat.

a quel endroit placer ce code avant laffichage de mon tableau?

Je suis bloqué mercide m'aider.
petitstitch Messages postés 4 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 22 février 2009
20 déc. 2005 à 17:18
Excellent !!! ;o)
cs_irus Messages postés 4 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 26 octobre 2005
25 oct. 2005 à 13:05
Merci pour ton code tres simple bien explique et efficace @+
cs_irus Messages postés 4 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 26 octobre 2005
25 oct. 2005 à 12:33
Merci pour ton code tres simple bien explique et efficace @+
cs_critou Messages postés 4 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 janvier 2006
29 sept. 2005 à 18:08
J'ai un script ListePhotos.php qui affiche sous forme de tableau des champs d'une base de données et j'aimerais afficher ce tableau sur plusieurs pages. Par exemple tout les 5 enregistrement je change de page.
cs_BeCaSiNe Messages postés 80 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 16 juin 2008
29 sept. 2005 à 18:02
Bah explique nous t'es requete !

Ca va beaucoup aider !
cs_critou Messages postés 4 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 janvier 2006
29 sept. 2005 à 18:01
Comment puis-je lier mon script avec celui là ou où faut-il que je l'intègre?

Merci d'avance
cs_BeCaSiNe Messages postés 80 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 16 juin 2008
29 sept. 2005 à 17:56
$_SERVER['SCRIPT_NAME'] c'est le nom de la page en cour
cs_critou Messages postés 4 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 janvier 2006
29 sept. 2005 à 17:54
Bonjour,

Juste une petie question de à quoi fait référence $_SERVER['SCRIPT_NAME']?

Ton script marche très bien merci beacoup mais je n'arrive pas à l'intégrer dans mon script existant.

Merci de ta réponse

Critou
electroweb Messages postés 9 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 29 avril 2009 1
25 août 2005 à 12:11
Merci pour ce script. Il est propre et agréable à lire. Je suis en train de le mettre dans une classe.

Bravo et bonne continuation.
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
24 août 2005 à 12:04
:) Oki doki, merci pr les infos!

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
24 août 2005 à 12:01
En fait c'est un champ qui sera toujours incrémenté inversement par rapport à l'autoincrément normal (pour que les messages les plus récents remontent et soient affichés en premiers). Lorsque je supprime un message portant l'id_class 2 par exemple, je supprime un id unique, il y aura donc un trou dans la table. Pour pallier à ça j'update tous les id_class supérieurs à 2 et je les décrémente de 1, et hop plus de trou dans le champ id_class vu que je me sers de ce champ uniquement pour classer mes données et les récupérer. Je me sers juste de l'id unique pour identifier les topics c'est tout.
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
24 août 2005 à 11:57
Dsl d'ête lourd (lol) mais je pige pas torp comment tu gère ce deuxième champ...

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
24 août 2005 à 11:31
non, d'où le deuxième champ id_class, et plus de problème.
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
24 août 2005 à 11:29
Salut!
Vi, mais par contre, ca pose pb dès que tu supprimes un truc parce parlà...

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
24 août 2005 à 11:27
un exemple (je vais prendre celui de mon forum)

tu as une table avec des id autoincrémentés (vu que les topics ont chacun un ID unique), j'ai rajouté un champ "id_class" qui lui est dans le sens inverse de l'id, ce qui évite de trier la table en ID DESC, mais en id_class ASC (bref je change pas ça). Ensuite quand j'ai besoin de la page 1 bah je fais ça par exemple :

SELECT machin,truc FROM table WHERE id_class BETWEEN 0 AND 20 (avec 20 enregistrements par page)

tu mets un index sur le champ id_class et t'as un forum qui ira aussi vite que t'ai 1000 ou 100000 enregistrements (enfin presque mais on se comprend, tandis qu'avec LIMIT plus t'auras d'enregistrements et plus ce sera lent).
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
24 août 2005 à 11:22
Il faudrait améliorer ca comment?

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
24 août 2005 à 11:10
Salut,

suite à la dernière source en date sur PHPCS pour réaliser ça je suis allé consulter cette source meilleure globalement, mais toujours à base de LIMIT :-( ce qui, sur une table comportant pas mal d'enregistrements, n'est pas bon.
pmthelord Messages postés 38 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 13 novembre 2008
25 avril 2005 à 21:53
Bah ouais c'est cale problème ... avec interbase c'est lourd car les requete du style "SELECT * FROM TABLE limit ..." n'existe pas :s
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
25 avril 2005 à 19:02
Salut!
Je comprends pas ce que tu veux faire, l'affichage est là... Tu le veux d'une autre façon?

Je connais pas interbase, dsl...

@++

R@f
pmthelord Messages postés 38 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 13 novembre 2008
25 avril 2005 à 17:53
et comment eske l'on fait pour le melanger avec l'affichage de nos resultat par exemple ???,
paceke la ya ke le nombre de page et pa laffichage ... ms je ne c po ou le mettre ou bien sil faut enregistrer ce code telle une fonction ou bien si on peu l'utiliser direct ds le fichier comme ca ...
merci de me repondre a bientot
pmthelord Messages postés 38 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 13 novembre 2008
25 avril 2005 à 17:46
esque tu pourrai me faire le meme script avec de l'interbase stp ???? :'(
moi je galere tro tro !!!! ca marche nikel en sql ms des ke tu passe avec interbase c la misere !!!!
alor si qqun peu maider se serai cool ;)
cs_kalamya Messages postés 4 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 1 août 2005
26 janv. 2005 à 14:25
Carrément excellent !
Enfin un exemple clair sur la pagination qui fonctionne à merveille. Merci beaucoup !
cs_mfaraday Messages postés 144 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 4 janvier 2010
29 juin 2004 à 20:04
Salut juste une petite question...

Pour afficher la dernière page... j'avais un petit problème que j'air résolu come ça :

if($courant + $apres < $nb_pages && $courant != $nb_pages)

mon problème était que je pouvais pas cliquer sur dernière quand j'étais à la page 8 sur 9...

Florian
cs_pyranhaz Messages postés 236 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 13 décembre 2004
28 juin 2004 à 01:38
Encore une job bien fait ;-)

Et comment utile pour mon site de centaine d'items pour ne pas exploser la bande passante inutilement...

Merci infiniement pour ce code à la google :d
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
27 juin 2004 à 16:27
Erreur lors du copié collé, je change ca! Merci pr l'info!

@++

R@f
cs_BeCaSiNe Messages postés 80 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 16 juin 2008
27 juin 2004 à 16:21
lol
Il y a une faute !!
Ta oublié $ à la preimiere ligne !!
cs_BeCaSiNe Messages postés 80 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 16 juin 2008
27 juin 2004 à 16:17
MERCI !!!!
Rejoignez-nous