pagination bootstrap

Eléphant du PHP | 89 Messages

12 avr. 2018, 16:48

Bonjour tous le monde,

Je rencontre un problème pour crée une pagination.
je comprend pas trop ou cela bloque.

J'affiche des profils avec des informations des utilisateurs quant cela dépasse 30 profils on passe aux suivant avec une requête Mysql en php.
j'affiche bien les 30 premiers dans ma pagination avec le nombre de page que cela donne.

Exemple :

J'a 45 profils, comme j'ai dit j'affiche que 30 profils par page ce qui donne 2 pages (bien sur j'arrondis) pour 45 profils.
Jusque là ça vas.

mais quant je veux passer a la deuxième pages rien ne fonctionne, j'ai tous mes 30 premiers je devrais en avoir 15 profils pour la 2ème pages.

Voilà mon code :

je commence par cela :

Code : Tout sélectionner

<?php $sql1 = "SELECT COUNT(*) as nb FROM user_reg AS R, user_profile AS P WHERE R.status LIKE 1 AND R.id LIKE P.`user_id`"; $req21 = $bdd->query($sql1); $data21 = $req21->fetch(); $nb1 = $data21[0]; $nbpage11 = $nb1/30; echo $nbpage1 = round($nbpage11); ?>
Puis

Code : Tout sélectionner

<script type="text/javascript"> $(document).ready(function() { $('#pagination-dem').twbsPagination({ totalPages: <?php echo $nbpage1 ?>, startPage: 1, visiblePages: 5, initiateStartPageClick: true, href: false, hrefVariable: '{{number}}', first: 'Première', prev: 'Précédent', next: 'Suivant', last: 'Dernière', loop: false, onPageClick: function (event, page) { $('.page-active').removeClass('page-active'); $('#page'+page).addClass('page-active'); }, paginationClass: 'pagination', nextClass: 'next', prevClass: 'prev', lastClass: 'last', firstClass: 'first', pageClass: 'page', activeClass: 'active', disabledClass: 'disabled' }); }); </script>
Après

Code : Tout sélectionner

<div class="tab-content"> <div class="tab-pane active" id="icon-only-tab1"> <div class="sidebar-category sidebar-category-visible"> <?php for ($K=0; $K <= $nbpage1; $K+=30) { $pages = ''; echo $pages = "page$K"; ?> <div class="jumbotron page" id="<?php echo $pages ?>"> <div class="category-content no-padding"> <?php $reponse13 = $bdd->query("SELECT R.status, R.gender, R.id, P.user_id, R.username, P.path FROM user_reg AS R, user_profile AS P WHERE R.status LIKE 1 AND R.id LIKE P.`user_id` LIMIT $K, 30"); while ($donnees13 = $reponse13->fetch()) { ?> <?php $path = $donnees13['path']; ?> <?php $id_user = $donnees13['user_id']; ?> <ul class="navigation navigation-main navigation-accordion"> <li> <a href="index.html"><i class=""><img src="<?php if ($path != "") { echo "./files_photo/$id_user/image_profil/$path"; }else { echo"./img/default_profile.jpg"; } ?>" class="img-circle img-sm" alt="">&nbsp;&nbsp;&nbsp;</i> <span><?php echo $donnees13['username']; ?> &nbsp;&nbsp;&nbsp <span class="label bg-success"> <?php if ($status == "0") { echo "Déconnecté"; }elseif ($status == "1") { echo"en ligne"; }elseif ($status == "2") { echo"en ligne"; }elseif ($status == "3") { echo"en ligne"; }else{ echo"en ligne"; } ?> </span> </span> </a> </li> </ul> <?php } $reponse13->closeCursor(); ?> </div> </div> <?php } ?> <ul id="pagination-dem" class="pagination-lg pull-right"></ul> </div> </div>
Merci de votre aide,

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7486 Messages

13 avr. 2018, 15:05

Tu utilises un truc javascript qui s'appelle twbs-pagination, vu que c'est un plugin jquery spécifique, il faut que tu investigues davantage l'origine du problème de ton côté, que dis la console javascript, as-tu essayé de debuguer le JS pour comprendre d'où vient le problème, est-ce que le code HTML généré via PHP est bien conforme à ce qui est attendu par le script, etc...

https://github.com/esimakin/twbs-pagination
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 89 Messages

16 avr. 2018, 15:54

Bonjour tous le monde,

Merci de ton aide @rthur

J'ai tous modifier, je me suis orienter vers une autre idée pour réaliser ma pagination.

Voilà mon code :

Code : Tout sélectionner

<div class="sidebar-category sidebar-category-visible"> <div class="category-content no-padding"> <?php $sql1 = "SELECT COUNT(*) as nb FROM user_reg AS R, user_profile AS P WHERE R.status LIKE 1 AND R.id LIKE P.`user_id`"; $req21 = $bdd->query($sql1); $data21 = $req21->fetch(); echo $nb1 = $data21[0]; $nbpage12= $nb1/30; $nbpage1 = ceil($nbpage12); ?> <script type="text/javascript"> var a = 0; function decrease(){ if (a > 0) { a-=30; document.getElementById('display').innerHTML = a; } } function increase(){ if (a <= <?php echo $nb1 ?>) { a+=30; document.getElementById('display').innerHTML = a; } } </script> <?php $valeurphp = '<div id="display"><script type="text/javascript">document.write(a); </script></div>'; ?> <?php $reponse13 = $bdd->query("SELECT R.status, R.gender, R.id, P.user_id, R.username, P.path FROM user_reg AS R, user_profile AS P WHERE R.status LIKE 1 AND R.id LIKE P.`user_id` LIMIT $valeurphp,30"); while ($donnees13 = $reponse13->fetch()) { ?> <?php $path = $donnees13['path']; ?> <?php $id_user = $donnees13['user_id']; ?> <ul class="navigation navigation-main navigation-accordion"> <li> <a href="index.html"><i class=""><img src="<?php if ($path != "") { echo "./files_photo/$id_user/image_profil/$path"; }else { echo "./img/default_profile.jpg"; } ?>" class="img-circle img-sm" alt="">&nbsp;&nbsp;&nbsp;</i> <span><?php echo $donnees13['username']; ?> &nbsp;&nbsp;&nbsp; <span class="label bg-success"> <?php if ($status == "0") { echo "Déconnecté"; }elseif ($status == "1") { echo"en ligne"; }elseif ($status == "2") { echo"en ligne"; }elseif ($status == "3") { echo"en ligne"; }else{ echo"en ligne"; } ?> </span> </span> </a> </li> </ul> <?php } $reponse13->closeCursor(); ?> </div> <div class="panel text-center"> <button onclick="decrease()">&larr; Précédent</button> <button onclick="increase()">Suivant &rarr;</button> <?php echo $valeurphp; ?> </div> </div>
Mon code fonctionne bien quant je place sur ma requête

Code : Tout sélectionner

$reponse13 = $bdd->query("SELECT R.status, R.gender, R.id, P.user_id, R.username, P.path FROM user_reg AS R, user_profile AS P WHERE R.status LIKE 1 AND R.id LIKE P.`user_id` LIMIT 0,30");
mais quant je fait cela

Code : Tout sélectionner

$reponse13 = $bdd->query("SELECT R.status, R.gender, R.id, P.user_id, R.username, P.path FROM user_reg AS R, user_profile AS P WHERE R.status LIKE 1 AND R.id LIKE P.`user_id` LIMIT $valeurphp,30");
Sa fonctionne plus comment faire pour incrementer et decrementer en rafraichissant ma page.
SOS je demande de l'aide.

Merci a vous,

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7486 Messages

16 avr. 2018, 15:59

C'est impossible de t'aider si tu ne fais pas toi même un debugage.
"Sa fonctionne plus" ça ne nous aide pas du tout pour essayer de trouver l'origine d'un problème...
- Qu'est-ce qui ne marche pas ?
- Quels sont les messages d'erreurs ?
- Qu'y a-t-il dans les logs de la console javascript ? dans les logs du serveur PHP ?
- Est-ce que le HTML généré est bien conforme à ce que tu veux ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 89 Messages

16 avr. 2018, 16:27

Ok, je comprend mais j'ai aucune erreur je comprend pas.
Je voie rien sur la console javascript, sur les logs serveur rien.
Juste que ma fonction incrémenter et décrémenter marche bien, mais quant je test avec l'affichage

Code : Tout sélectionner

<div class="panel text-center"> <button onclick="decrease()">&larr; Précédent</button> <button onclick="increase()">Suivant &rarr;</button> <?php echo $valeurphp; ?> </div>
cela me donne bien mon chiffre qui passe de 0 a +16 ou a -16,

Mais quant je modifie cela

$reponse13 = $bdd->query("SELECT R.status, R.gender, R.id, P.user_id, R.username, P.path FROM user_reg AS R, user_profile AS P WHERE R.status LIKE 1 AND R.id LIKE P.`user_id` LIMIT 0,30");
par
LIMIT 0,30 par LIMIT $valeurphp,30 plus de résultat rien ne s'affiche.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7486 Messages

16 avr. 2018, 16:37

Ok, je viens de comprendre.
Fait un var_dump() de ta requête SQL, et tu verras le problème. $valeurphp doit être un nombre or tu lui balance du code HTML
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 89 Messages

16 avr. 2018, 16:58

J'ai compris je récupérer le résultat et ma fonction
<script type="text/javascript">document.write(a);</script>0
Ce que j'ai besoin c'est juste le résultat pas tous.

Merci a ton aide,

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7486 Messages

16 avr. 2018, 17:20

Je crois que tu mélanges PHP et Javascript, ça ne peut pas marcher.

Le principe c'est :
- En 1er le code PHP s'exécute sur ton serveur d'hébergement.
Cela génère du texte statique qui est le plus souvent du code (HTML, JS, Json, etc...)

- Dans un 2nd temps, le code ainsi généré est envoyé au navigateur Web, et c'est le navigateur web qui va interprêter d'abord le code HTML, puis le code CSS et le Javascript.


Or là toi tu essayes de mettre dans une variable PHP, la valeur d'une variable javascript, cela n'est pas possible.
En effet, ton code javascript ne s'exécute que sur le navigateur et surtout après, l'exécution du code PHP par le serveur.

Donc il faut que tu revoies ton système :
- Soit tu fais une pagination en PHP côté serveur, et à chaque clic sur la page suivante ça recherchera la page complète (et pour faire ça effectivement c'est avec la clause LIMIT dans ta requête MySQL).
- Soit tu fais une pagination en javascript, ça veut dire que tu charges en PHP tous les résultats, et c'est le javascript qui va les afficher que 20 par 20 (par exemple)
- Soit, la solution hybride c'est de faire un mix des 2 avec de l'Ajax, c'est à dire qu'en javascript on va faire une requête au serveur pour obtenir les résultats suivants précédents sans recharger la page.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 89 Messages

16 avr. 2018, 19:12

Merci,

je penser avec Javascript générer les changement de chiffre et le récupérer via php et l'utiliser dans la requête mysql.
Et cela me donne rien.