AFFICHAGE DE RÉSULTATS MYSQL SUR PLUSIEURS PAGES

cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 - 19 juil. 2004 à 09:21
cs_romualb Messages postés 1 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 28 septembre 2009 - 28 sept. 2009 à 11:41
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/24689-affichage-de-resultats-mysql-sur-plusieurs-pages

cs_romualb Messages postés 1 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 28 septembre 2009
28 sept. 2009 à 11:41
j'ai développé une classe qui affiche une liste à partir du résultat d'une requête SQL, avec tri, pagination...
http://www.romualb.com/2009/09/27/144/classe_d_affichage_de_listes.html
jimmywydadi Messages postés 4 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 15 février 2008
1 oct. 2007 à 15:54
bonjour
je voudrais un code premet de faire (Précé [ 1 2 3 4 5 6 7 8 9 ] Suiv)
d'une seul page web
cs_guss Messages postés 2 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 15 mai 2007
15 mai 2007 à 16:04
Bonjour,

Merci pour le code et son optimisation.
J'ai changé une ligne dans le code optimisé de Truemistress.

$html.= ceil($d/$l)+1;//affiche le numéro de la page courante

à la place de :
$html.= ceil($nb_total/$l)-ceil(($nb_total-$d)/$l)+1; //affiche le numéro de la page courante

Bonne Journée
Guss
eax Messages postés 728 Date d'inscription jeudi 20 juin 2002 Statut Membre Dernière intervention 7 novembre 2007 2
27 janv. 2007 à 16:22
oui, c vrai que ça le rend un peu plus propre, merci ...
truemistress Messages postés 1 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 27 janvier 2007
27 janv. 2007 à 12:21
Merci pour ce code très utile.

Par contre, en tenant compte -entre autre- des commentaires postés, je l'ai simplifié et optimisé :
- en remplaçant les '&' par '&'
- en remplaçant les 'nowrap' par 'nowrap="nowrap"'
- en supprimant $lien, par ex : ['.$lien.'d=0&l='.$l.' par ] (cela permet d'avoir une URL qui ne se rallonge pas à chaque action, elle reste constamment du type '?d=xx&l=xx')
- en remplaçant les 'echo' par '&html.= ', ce qui permet de faire un 'return $html;' à la fin de fonction, pour que quand on appelle la fonction ça affiche directement les éléments de navigation, dans n'importe quelle page.
- j'ai remplacé les textes "page suivante", "dernière page" etc.. par des images standards (left_on.gif=une flèche vers la gauche pour le lien "précédente" et 2 flèches vers la gauche pour le lien "première" ; idem avec des fleches vers la droite pour "suivante" et "dernière", avec les textes alternatifs correpondants.
- j'ai rajouté $d = $_GET['d'];

Du coup, cette fonction peut etre copiée et appliquée n'importe où (en changeant juste le nom des images : 'right.on.gif' et 'left_on.gif').

Voici donc la fonction allégée et optimisée que je propose :


function gestion_pages($d,$l,$nb_total){
//$d: premier enregistrement affiché
//$l: nombre d'enregistrements affichés par page
//$nb_total: nombre total d'enregistrements

$html.= '';
$debut=$d-$l;
if($debut<0) $debut=0;
if($d>0)
{
$html.= ' ';
$html.= '';
}
$html.= ', page ';
$html.= ceil($nb_total/$l)-ceil(($nb_total-$d)/$l)+1; //affiche le numéro de la page courante
$html.= '/';
$html.= ceil($nb_total/$l); //affiche le nb total de pages
$html.= ', ';
$suiv=$d+$l;

if($d+$l<$nb_total)
{
$html.= ' ';
$html.= '';
}
$html.= '
';
return $html;
}

//on rajoute ces infos avant sa requete
$d = $_GET['d'];
if(!isset($_GET['l'])) $_GET['l']=4; //pour avoir que 4 enregistrements par page par exemple
if(!isset($_GET['d'])) $_GET['d']=0; //on affiche en premier l'enregistrement 0 (le premier) par défaut

// la requete :
$results = $db->dbQuery("SELECT * FROM nomtable LIMIT ".$_GET['d'].",".$_GET['l']." ");

//appel de la fonction :
$barrenavig = gestion_pages($_GET['d'],$_GET['l'],$nb_total);
cs_aminix9 Messages postés 96 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 9 février 2010
29 juil. 2004 à 12:50
je n ai pa de commentaire mais je tiens à te remercier car ça m a aidé bcp .
j ai pris ta fonction et j ai rempli les champs vides et ça marche .
merci encore une fois ;-)
derfum Messages postés 45 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 5 septembre 2004
21 juil. 2004 à 21:01
En réponse à GRenard :

En bon citoyen, j'indique quand même en premier lien une traduction officielle du W3C (malgré tout compréhensible) : http://www.la-grange.net/w3c/xhtml1/
Pour ce qui est des standards du web, voilà un site référence à posséder dans tous bons favoris (ou signets, ou marques-pages...) : http://www.openweb.eu.org (et c'est en français)
Et plus particulièrement voilà 4 articles à lire :
http://www.openweb.eu.org/articles/html_au_xhtml/
http://www.openweb.eu.org/articles/differentes_dtd/
http://www.openweb.eu.org/articles/respecter_semantique/
http://www.openweb.eu.org/articles/caracteres_illegaux/

Ceci permettra d'approfondir; mais en quelques mots voilà ce qu'il faut retenir du XHTML :
- Les déclarations de documents sont importants
- Le XHTML (n'étant qu'une DTD du XML) est avant tout un langage sémantique, c'est-à-dire d'organisation de concepts, pas de présentation (comme l'était HTML 3.2/4.0). Il faut donc séparer le fond de la forme, c'est pour ça que tous les outils de présentation (balises font, center, u, i, b, s ; attributs align, cell*...) sont dépréciés (et même illégale pour le XHTML strict) et à remplacer par du CSS. De plus, les balises peu utilisées en HTML (blockquote, dd, dt, strong, em) ne sont pas juste des alias de pre, ul, li, b, i mais bien porteuses d'un concept diffèrent à utiliser à bon escient.
- L'emboîtement correct des balises est exigé
- Toutes les balises se ferment (même

,
, ...)
- Les URLs sont encodées (&)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 juil. 2004 à 20:15
oui il y a www.openweb.eu.org qui est pas mal ;-)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
21 juil. 2004 à 19:02
Je ne suis pas encore assez xhtml, je devrais m'y mettre bientot lorsque j'airai du temps ! mais c'est quelque chose que je dois apprendre :) Si tu connais une place ou tous les standards sont bien écrit et pas perdu dans la masse je suis prèt à tout lire :) (j'espere qu'il y a autre chose que wc3 :P)
derfum Messages postés 45 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 5 septembre 2004
21 juil. 2004 à 11:54
On veut jouer les lourds sur les standards ? ^_^ alors :

* cellspacing="0" cellpadding="2" border="0"
* align="center" valign="bottom"
--> Deprecié : préférez les feuilles de style

* nowrap
--> Erreur ! remplacer par nowrap="nowrap" (les raccourcis sont interdits en xhtml, comme selected, checked, disable, ismap, nowrap...)

FReD
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
20 juil. 2004 à 18:10
"je vois que tu es quand même avancé en php, tu pourrais commencer à te fier aux standards... ceux de php on dirait que tu les maitrises alors pourquoi ne pas essayer ceux des commentaires de fonction"

et XHTML par la même occasion ;-) (par exemple le & dans les urls il faut le remplacer par &

a +
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
19 juil. 2004 à 09:21
Tu devrais essayer de ne pas passer une variable superglobale dans la fonction puisque dans celle ci tu peux y accèder dans la fonction directement...
Je comprends que tu fais cela parce que tu veux garder tes paramètres passé en _GET
Alors encore mieux et plus amusant à faire (mouarf je l'ai fait mais je vais te laisser chercher vu que tu m'as l'air un bon petit codeur ;))
C'est de ne pas passer le lien du tout ni le mettre dans le a href, mais de commencer directement le lien par
?d= (par exemple) et de rajouter à la fin &".$query."

$query pouvant être $_SERVER['QUERY_STRING'] SANS les variables $d et et $l bien sur (ya un peu de ereg à faire la dedans ;))

2ieme critique
Normalement, une fonction, permet soit d'alléger le code ou l'on est présentement, (genre appeler une fonction qui va afficher beaucoup de chose (avec echo)), ou encore, ca sert au lieu de se répeter 50 fois, et l'autre c'est d'afficher un module...
Ta fonction devrait etre un "module" qui devrait fonctionner sur n'importe quel site. Le seul problème c'est que tu fais pleins de echo de tableau... Moi si je veux ta fonction je dois enlever ces echo et ne garder que les echo des links... (ou encore mieux, faire un return ...)
Donc en fait ce que je te propose de faire, c'est de faire la fonction le plus modulaire possible pour que n'importe qui puisse prendre la fonction avec directement copier coller sans rien modifier à l'intérieur !
(Ca c'est trop fort quand ca arrive :P)

3ieme critique,
je vois que tu es quand même avancé en php, tu pourrais commencer à te fier aux standards... ceux de php on dirait que tu les maitrises alors pourquoi ne pas essayer ceux des commentaires de fonction ;)
/**
* @return void
* @param int $l
* @desc Une petite description
*/


Bonne Chance !
Rejoignez-nous