une pagination de pages avec mysql et la librairie
Par aurelien gerits le vendredi, 10 avril 2009, 00:16 - pagination de pages - Lien permanent
Pour la création d'une pagination de pages avec mysql
il faut parfois utiliser beaucoup de ligne de code.
Avec la librairie c'est chose facile surtout si l'on dois débogué celle-ci.
Vous devez tout d'abord récupéré tous les enregistrements.
[PHP] $sql1 = 'SELECT COUNT(id) as total FROM matable'; $request = $this->layer->select($sql1);
Cette ligne de code sélectionne tous les enregistrements de votre base de donnée.
Il faut ensuite savoir combien on veux en afficher maximum par page.
[PHP] $limit = 5;
On dois instancier la class et faire la requête contenant notre limit et offset pour limité le nombre d'enregistrement par page.
[PHP] if(magixcjquery_filter_request::isGet('page')) { if(is_numeric($_GET['page'])){ $page = intval($_GET['page']); }else{ $page = 1; } }else { $page = 1; } $pagination = new magixcjquery_pager_pagination(); $offset = $pagination->pageOffset($limit,$page); $sql = 'SELECT * FROM matable LIMIT '.$limit.' OFFSET '.$offset; $sel = $this->layer->select($sql); foreach($sel as $selection) $test = $selection['prenom']; $pagination = $pagination->pagerData($request,'total',$limit,$page);
Voila notre pagination fonctionne, il ne reste plus que le html
[html] <div class="pagination"> <div class="middle"> <ul> <?php echo $pagination; ?> </ul> </div> </div>
magixcjquery_pager_pagination::pagerData(requête,résultat du count,limit,la variable de page,url (optionnel), débogue (optionnel));
Commentaires
Dans ton exemple, ça semble facile de faire une injection SQL grâce à $_GET['page'] qui n'est pas testé pour savoir si c'est un nombre.
Tu as raison Moe, je n'ai pas réfléchi en écrivant le code.
Je vais donc modifié pour avoir quelque chose de propre et surtout sans injection :p
Au faites,
tu n'aurai pas quelques idées à me donnée pour compléter mon API à part remettre de l'ordre dans les class :D
J'ai commencé la partie XML et jQuery UI.
Mais je pense modifié la partie jQuery pour n'utiliser qu'une seule instance de class au lieu d'un gros panel.
J'écris actuellement une grosse interface accompagné d'une class de reflexion.
Voici ta correction : $page = intval($page?is_numeric($_GET['page']):false);
($page?is_numeric($_GET['page']):false) va tester $page et retourner un booléen avec is_numeric() ou false, et intval() va le transformer en chiffre, ça va fonctionner ?
Il y a un fichier avec un nom bizarre : https://magixcjquery.svn.sourceforg...
En anglais on écrit reflections et non reflexions : https://magixcjquery.svn.sourceforg... (cf. http://fr.php.net/manual/en/languag... )
À mon avis, il manque un fichier README ou un exemple dans ton application, pour savoir comment l'utiliser; là j'ai des fichiers mais je ne sais pas quoi en faire.
Comment sa un nom bizarre mdr, DataObject contient mon abstraction ainsi que l'extension de PDO.
La class qui sera utilisé au sens publique est magixLayer.
Alors pour ce qui est des exemples,
ils sont un peu pauvre je te l'accorde mais bien présent dans la documentation et non dans le dossier.
Pour le $_GET :
Je travail dessus tous les jours pour amélioré le système, les class, les méthodes.
PS: reflections est corrigé ,
je ne l'ai pas encore commencé alors en principe il ne devrai même pas ce trouvé la.
J'ai cependant une explication tenant en une ligne.
Manque de sommeil MDR
Le fichier s'appelle class.DataOjects.php et non class.DataObjects.php
Sinon, dans ton exemple au-dessus $page est un numéro de page puis un objet, il risque d'y avoir un problème. De même si $_GET['page'] n'est pas un nombre, $page ne sera pas défini.
Tu as raison,
une erreur de parcours pour le nom de fichier il dois bien s'appelé DataObjects et non DataOjetct .
Je vais le corrigé dans le svn.
Piour ce qui est du test pour le $_GET il est maintenant testé dans l'exemple,
mais je pense faire quelque chose au niveau de la fonction pour renforcé la sécurité.
Tes conseils sont précieux , je suis content que tu me guide
J'ai déjà fais quelque changement pour l'organisation et surtout eu niveau des noms.
J'ai aussi modifié les class et interface qui s'occupe de jQuery.
L'utilisation de class différentes peu être contraignant alors j'ai décidé de n'utiliser qu'un seul nom avec un héritage plus puissant.
qu'en pense tu ?
Il manque un else {} à if(is_numeric($_GET['page'])) {}, $page ne sera pas défini si $_GET['page'] n'est pas un nombre, ça risque de provoquer des erreurs.
Pour le reste, la conception d'un framewok entier me dépasse, je n'ai pas d'autres conseils à te donner, sinon d'essayer de faire le meilleur framework possible. Bonne chance.
oui tu as raison, je vais revoir l'exemple pour la pagination.
Pour ce qui est du reste, j'avance sur la partie layer que j'espère assez optimisé.
Je te laisse la testé, son utilisation est hyper simple.
La fonction select retourne tous les enregistrements dans un tableau, d'autres arrive bientôt.
Comme le selectOne, le fetchColumns, et enfin le fetchColumnsAll.
J'espère aussi avoir un système d'auto jointure qui peu franchement être pratique
bref sa avance.
J'ai introduit jquery UI pour la partie jQuery