|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juin 2009 Messages : 16 ![]() |
Bonjour
Je viens vers vous car j'ai un soucis pour faire une pagination. Chaque fois que je met un code de pagination cela m'affiche plus de 5000 pages j'ai tout essayé et pas moyen d'y arriver j'essaie avec ce tuto http://antoine-herault.developpez.co...atique-en-php/ mais voila cela m'affiche trop de page Voici mon code Code :
|
||
|
|
00
|
|
|
#2 | ||
|
Membre du Club
![]() Adeline Consultant informatique Inscription : décembre 2011 Messages : 20 ![]() |
J'avoue n'avoir regarder que le début de ton code (la partie qui calcul le nombre de page) vu qu’apparemment c'est ça qui te pose un problème.
Il existe une fonction pour compter le nombre de ligne d'une réponse à une requete sql: mysql_num_rows, cela devrai t'aider à compter le nombre de ligne qui se trouve dans ta table download. essaies avec quelque chose comme ça: Code php :
Mais je ne suis pas sur que cela résolve ton problème tu peux nous dire combien tu as d'enregistrement dans ta table et de combien il se trompe pour la pagination? |
||
|
|
00
|
|
|
#3 | ||
|
Membre éprouvé
![]() Inscription : juin 2006 Messages : 606 ![]() |
bonjour,
il faut voir d'ou vient le pb :p Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Taoufiq BenDéveloppeur Web Inscription : mai 2009 Messages : 466 ![]() |
Tu pourra faire un echo de ta requéte a la fin pour voir quece qui donne
|
|
|
00
|
|
|
#5 | ||||
|
Invité de passage
![]() Inscription : juin 2009 Messages : 16 ![]() |
Citation:
Citation:
c'est bizarre et j'ai essayez plein de pagination et c'est le meme probleme d'affiche de page. Qu'appelez vous par faire un echo Je vous remercie de vos reponse |
||||
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Bonjour,
déja, commence par récupérer le résultat de ta requête comme il le faut. mysql_fetch_assoc (comme indiqué dans la doc) retourne un tableau de résultat. donc : Code :
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
||
|
|
00
|
|
|
#7 | ||
|
Membre éclairé
![]() Inscription : juin 2007 Messages : 337 ![]() |
Code :
ou je me trompe?
__________________
Conception / Dev |
||
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
héhé
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
00
|
|
|
#9 | |||
|
Invité de passage
![]() Inscription : juin 2009 Messages : 16 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#10 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Salut
Citation:
Le nombre de lignes représente le nombre de messages non ? A mon avis il y a un problème dans la manière dont est conçu ce système de pagination. Théoriquement, il faut exécuter 2 fois cette même requête (avec les like etc ...). De ton coté tu récupère tout, sans aucun critère, du coup ce nombre maxi qui est à la base de la pagination est faut (trop de résultats). Il faudrait théoriquement : - Une 1ère requête qui elle n'intègrera pas de limite (pas de LIMIT 0, 10 par exemple). Le but étant de récupérer tout, d'avoir le nombre total de lignes (ou de messages), mais en intégrant les mêmes conditions (ou clauses), la même requête en somme. Ce sera grâce à ce nombre total où il sera possible de créer la pagination, et de définir les limites dans la 2ème requête. On pourra obtenir le nombre de page qu'il va avoir et le nombre de message par page. - Un 2ème requête identique à la différence que cette fois elle intègrera la limite, c'est à dire qu'on récupèrera seulement les messages selon le N° de page qu'on demande et du nombre de ligne voulus. Ci-dessus est donc un moyen que je dirais "classique" pour faire de la pagination. Cependant, MySQL intègre cette notion de pagination et offre ceci : SQL_CALC_FOUND_ROWS et FOUND_ROWS(), les 2 vont de paire. Exemple : Code :
Ici, les choses sont légèrement différentes par rapport au 1er exemple plus haut. La 1ère c'est que cela évite de lancer 2 fois la même requête (ce qui normalement devrait être plus performant). Cependant, quand on lance la 1ère requête, il y a une inconnue, ça concerne le nombre de lignes que doit retourner la requête, c'est à dire le 20 dans le LIMIT. En mettant 20, on ne sait pas si on va avoir réellement 20 lignes ou moins. Mais ça n'est pas si gênant que ça. Grosso modo. On sait à l'avance le nombre de lignes maximum par page qu'il peu avoir, dans mon exemple c'est 20. On sait aussi à l'avance la page demandée (par défaut c'est la 1ère, soit LIMIT 0, 20). Donc lorsqu'on exécute la 1ère requête, et si c'est la 3ème page qui est demandée, alors on mettra : LIMIT 40, 20 (soit récupérer à partir de 40, et récupérer au maxi 20 lignes). Le résultat de cette 1er requête contiendra alors uniquement les messages voulus. A l’exécution de la 2ème requête, ceci permettra de créer la pagination car c'est à ce moment qu'on saura le nombre total de messages (sans aucune limite). (Si on regarde bien, ce fonctionnement est un peu l'inverse du 1er exemple). Il y a alors 2 manières de faire. A toi de voir.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Bonjour,
Tu peux très bien faire ça en 1 seule requête, bon j'avoue que je ment un peu là... en fait il s'agit de requêtes imbriquées : Code :
SELECT c.*,t.* FROM (SELECT count(*) as total FROM aide_region) c,aide_region t LIMIT 0,20 Bon après, en terme de perf, là je sais pas, faudrait un spécialiste mysql. Je pense néanmoins que cela doit être plus rapide que de faire 2 appels.
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : juin 2009 Messages : 16 ![]() |
wahou c'est du chinois tout ça.
Oui je me suis trompé c'est 7 ligne. Mais je me pose une question est-ce que cela viendrais pas de mon script car j'en ai essayé plein de pagination et meme des classe pagination et c'est pareil |
|
|
00
|
|
|
#13 | |||||
|
Invité régulier
![]() Inscription : avril 2009 Messages : 4 ![]() |
Citation:
Tout est indiqué ici McGyver59280. Ton code ne correspond pas à la logique de la pagination. Code :
Autrement dit, tu as des critères qui font ta requête sql plus bas dans ton code. Ta requête doit être exécutée DEUX fois : - une fois sans les limites => pour compter le nombre total de résultats - une seconde fois par 'tranche', ici 2 résultats à chaque fois. Relis ton code et les commentaires associés ! Code :
|
|||||
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : juin 2009 Messages : 16 ![]() |
J'ai mis deux pour des test autrement c'est par 5
|
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : juin 2009 Messages : 16 ![]() |
Bon je crois que ce script de recherche on ne peux mettre une pagination. Connaissez vous un bon moteur ou une class avec les plusieur option de recherche
Merci a vous pour votre patience |
|
|
00
|
|
|
#16 | |||||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Citation:
Opte pour la 2ème solution que je t'ai mis, c'est beaucoup plus simple que tu le crois. Il juste procéder dans l'ordre. 1/ On défini une variable qui contiendra le nombre maximum de ligne par page Puis on défini le N° de page en court (ou demandée) : Code :
Si la page demandée est la 3, alors : 3 x 20 = 60 (ça récupèrera à partir de cette ligne). Ca donne : Code :
$limit_debut = $page_courante * $nb_lignemax_page; Code :
Mais c'est un nombre maxi. Bien souvent il y a moins pour la dernière page. Et dans la foulée on lance la 2ème : Code :
$sql = 'SELECT FOUND_ROWS() AS total_reel'; C'est avec celle ci qu'on pourra construire la pagination, c'est à dire la 1ère, les pages suivantes jusqu'à la dernière. Suffit des faire les divisions et compagnie (ceil, etc ...). Mais ça tu l'a déjà fais, donc suffit de le reprendre. Ou est le problème ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||||
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() Inscription : juin 2009 Messages : 16 ![]() |
Le soucis est que je suis assez limité en connaissance php
|
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
C'est pourtant simple...
-tu as configuré 2 messages par page -tu fais une requête sans aucun critère de filtre, tu obtiens environ 10000 résultats. (nous l'appellerons requête1) -tu fais une requête avec les critères de filtre, tu obtiens 7 résultats (nous l'appellerons requête2 ) si tu divises le nombre de résultat obtenu par requête2 par le nombre de message par page : 7 / 2 = 3,5 (pas pratique donc on utilise la méthode ceil() qui va nous arrondir la division au supérieur ce qui nous donne : 4 , on l'appellera nbpages) maintenant : -je veux afficher : "nombre de résultat / nombre total" alors : nb résultats requête2 / nb résultats requête1 -je veux afficher "page courante / nombre de pages" alors : $page_actuelle / nbpages Voilà, c'est tout... actuellement tu obtiens 5000 pages, parce que tu t'entêtes à vouloir diviser le nombre total de lignes dans ta table (10000) par le nombre de message par page (2)... Ceci étant dit, tu récupères un script de pagination qui ne peut pas faire de pagination... Tu sollicite notre aide pour comprendre ton travail, on t'explique, et au final c'est trop compliqué, tu cherches maintenant un autre script.... Je suis désolé de t'apprendre que tu auras sans aucun doute tout autant de problèmes avec un autre script... ce n'est pas le script qui ne fonctionne pas, c'est toi qui ne le comprends pas. Je ne veux pas te décourager, mais bon... ou tu fais un effort pour essayer de comprendre ce que les autres prennent du temps à t'écrire, ou tu cherches de la compétence autour de toi pour te le faire... Sinon pour trouver d'autres scripts, google en est gavé, tu trouveras facilement... J'espère que tu ne le prends pas mal et bonne continuation !...
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Inscription : juin 2009 Messages : 16 ![]() |
Non je le prend pas mal. Tu as raison c'est en perseverant que l'on comprend.
Je vais revoir mon script et faire etape par etape en suivant vos indications Je te remercie de ta patience |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com