Gérer l'affichage en plusieurs pages

Eléphanteau du PHP | 31 Messages

24 févr. 2011, 15:43

Bonjour à tous!

Alors voilà, j'écris un script qui permettra aux utilisateurs de chercher toutes sortes de choses dans la BD. Cependant, il y aura en général trop de résultats pour pouvoir les afficher confortablement sur une seul page. Alors je voudrais diviser la liste des résultats et permettre une navigation par page.

Mais voilà, je ne sais pas trop comment géré ça. Je sais extraire, exemple, 10 résultats de ma base de donnée, mais je ne sais pas comment aller à la page 2 et là ne récupérer que les 10 suivant... Vous voyez ce que je veux dire?

Donc je sais pas si je dois faire ça avec PHP uniquement, ou si je peux extraire par 10 depuis mysql.

J'espère avoir été clair.

Merci d'avance.

Eléphant du PHP | 314 Messages

24 févr. 2011, 15:48

Voilà une piste à suivre pour toi :
$nb_par_page = 10; // 10 messages par page par exemple
if (isset($_GET['p']) && intval($_GET['p'])>0)
        $page = intval($_GET['p']); 
else 
        $page = 1;
 
$limit_deb= ($page - 1) * $nb_par_page ;
puis la requete SQL :
SELECT .... FROM ... LIMIT $limit_deb, $nb_par_page;
Cordialement,
Julien - http://laravel.fr/

Eléphanteau du PHP | 31 Messages

24 févr. 2011, 15:55

D'accord. Merci.

Je vais regarder et adapter ça, je pense que ça devrait le faire :)

Je ne savais pas qu'on pouvait donner 2 limites à mysql.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 févr. 2011, 00:46

Attention ce n'est pas deux limite mais bien une seule.

définition de limite [LIMIT {[offset,] row_count | row_count OFFSET offset}]

plus d'info dans la doc : http://dev.mysql.com/doc/refman/5.0/en/select.html

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

25 févr. 2011, 01:01

Et que pensez-vous de faire une classe dans laquelle, lors de la construction, on charge tous les enregistrements de la base dans un tableau puis on lui attribut une fonction d'affichage de l'enregistrement x à x+10.

Du type:

Code : Tout sélectionner

class Table { var tableau = Array(); public function __construct{ //requete sql pour charger les enregistrements dans $this->tableau } public function affiche($debut){ for ($i = 0;$i<10;$i++){ echo $this->tableau[$i]; } } }
Dans le script d'affichage de la page, il ne reste plus qu'à faire un :

Code : Tout sélectionner

<?php $monTableau = new Tableau(); $monTableau->affiche(11) //pour afficher les enregistrements de 11 à 20 ?>

Eléphanteau du PHP | 31 Messages

25 févr. 2011, 02:34

Oui, pourquoi pas dans un tableau. Cependant, je remplis déjà un tableau HTML et j'ai donc pas mal de données à extraire. Peut-être serait-il plus "propre" de la faire directement avec MySql non?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 févr. 2011, 02:53

oui un affichage page par page semble plus approprié.

après s'il y a "énormément" d'infos tu peut, en plus t'orienter vers un système de cache.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 314 Messages

25 févr. 2011, 15:30

Autant utiliser array_slice .... mais c'est beaucoup plus propre le limite MySQL ;)
Cordialement,
Julien - http://laravel.fr/

ViPHP
AB
ViPHP | 5818 Messages

25 févr. 2011, 16:44

@micar

Même si c'est possible, ce n'est pas une solution pérenne sauf pour de petits projets avec des fonctionnalités limitées.

1ère limitation : La mémoire nécessaire pour faire ton tableau va augmenter proportionnellement aux données de ta table.

2ème limitation : Les tableaux sont très peu adaptés pour faire des tris. Si tu mets en place un système de recherche cela va être très difficile à gérer alors que les bases de données sont faites pour cela.

Petit nouveau ! | 5 Messages

25 févr. 2011, 17:45

J'ai ma réponse. :D
- Faut-il hésiter à solliciter la base Mysql ?
- non !
- Merci, j'applique le conseil dès aujourd'hui :P mysql_query, me voici ! :wink:

Eléphanteau du PHP | 31 Messages

26 févr. 2011, 09:49

Alors... Feedback. Je viens de m'en servir et j'ai opté pour la solution de AoSiX. Je n'ai pas tant de données que ça, la table ne devrait pas dépasser les 500 entrées donc ça roule, et plutot bien même.

Alors, maintenant il faut que je génère un espèce de navigateur, qui calculera le nombre total de page, et mais coupera de cette manière [1][2][3][...][20] pour ne pas avoir quatre ligne de ça. J'y réfléchis.

Merci à vous tous pour avoir répondu, je trouve la communauté de ce forum très agréable et compréhensive envers les débutants!

ViPHP
AB
ViPHP | 5818 Messages

26 févr. 2011, 20:19

Alors, maintenant il faut que je génère un espèce de navigateur, qui calculera le nombre total de page, et mais coupera de cette manière [1][2][3][...][20] pour ne pas avoir quatre ligne de ça. J'y réfléchis.
C'est pas forcément pratique pour l'utilisateur. Avec 25 affichages par pages cela ne te fait que 20 numéros à afficher pour un total de 500 enregistrements. Et 20 numéros peuvent tenir sans problème sur une seule ligne. Cela dit l'exercice est intéressant...

desauany
Invité n'ayant pas de compte PHPfrance

07 avr. 2012, 21:11

Cool, la réponse d'AoSix. Compact et efficace. Merci.