Le tri de mes colonnes ne s'effectue pas correctement
Résoluflexi2202 Messages postés 3822 Date d'inscription Statut Membre Dernière intervention -
bonjjour a tous
je rencontre un soucis pour le tri de mes colonnes avec la pagination
le tri de mes colonnes s'effectue bien lorsque je retire la pagination
Mais lorsque la pagination est presente , cela ne se deroule pas correctement
pour la colonne date si je trie sur tri ascendant ou descendant le tri s'effectue bien et lorsque je navigue dans la pagination le tri continue a bien s'effectuer
par contre pour les autres colonnes lorsque j'effectue le tri , cela ne fonctionne que pour la premiere page , lorsque je change de page le tri ne s'effectue plus
je vous donne mon code
<?php session_start(); //activation erreur error_reporting(E_ALL); ini_set('display_errors', true); ini_set('display_startup_errors', true); // On détermine sur quelle page on se trouve if (isset($_GET['page']) && !empty($_GET['page'])) { $currentPage = (int)strip_tags($_GET['page']); } else { $currentPage = 1; } //connection require_once ('../bases.php'); // On détermine le nombre total d'articles $sql = 'SELECT COUNT(*) AS nb FROM wp_postmeta WHERE (meta_key = "nombre_dablettes")'; // On prépare la requête $query = $bdd->prepare($sql); // On exécute $query->execute(); // On récupère le nombre d'articles $result = $query->fetch(); $nbArticles = (int)$result['nb']; // On détermine le nombre d'articles par page $parPage = 10; // On calcule le nombre de pages total $pages = ceil($nbArticles / $parPage); // Calcul du 1er article de la page $premier = ($currentPage * $parPage) - $parPage; //requete $sql = "SELECT a.post_title ,a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as intro,d.meta_value as espace, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY post_date DESC LIMIT :premier, :parpage ; "; $sort = "date_desc"; if (isset($_GET['sort'])) { $sort = $_GET['sort']; } if ($sort == "date_asc") { $sql .= " ORDER BY a.post_date ASC"; } else if ($sort == "date_desc") { $sql .= " ORDER BY a.post_date DESC"; } else if ($sort == "nbre_prises_asc") { $sql .= " ORDER BY CAST(d.meta_value AS UNSIGNED) ASC"; // tri par nombre de prises (converti en nombre) } else if ($sort == "nbre_prises_desc") { $sql .= " ORDER BY d.meta_value+0 DESC"; } else if ($sort == "titre_asc") { $sql .= " ORDER BY c.meta_value+0 ASC"; // tri par nombre de prises (converti en nombre) } else if ($sort == "titre_desc") { $sql .= " ORDER BY c.meta_value+0 DESC"; } else if ($sort == "auteur_asc") { $sql .= " ORDER BY u.display_name ASC"; } else if ($sort == "auteur_desc") { $sql .= " ORDER BY u.display_name DESC"; } // On prépare la requête $query = $bdd->prepare($sql); $query->bindValue(':premier', $premier, PDO::PARAM_INT); $query->bindValue(':parpage', $parPage, PDO::PARAM_INT); // On exécute $query->execute(); ?> <!doctype html> <html lang="en"> <head> <?php include("../include/head.php"); ?> </head> <!-- debut body --> <body style="background-color:#cec1c1;" onLoad="document.getElementById('attente').style.display='none'"> <div class="container" style="background-color:#87CEEB;"> <!-- debut container entete--> <div class="container" style=" max-width: 100%;margin:auto;"> <?php include("../include/baniere-peche-perle.php"); ?> <?php include("../include/menu3.php"); ?> </div> <!-- debut container qqui viendra afficher les 3 premiers lignes du code --> <div class="container" style=" max-width: 100%;margin-top:15px;"> <div class="row"> <div class="col-sm-6 ml-auto mr-auto " style=" background: #ECE9E7;margin-bottom:10px;"> <h1 style="text-align:center;"> Sorties de pêche générales</h1> </div> </div> <div class="row"> <div class="col-sm-8 ml-auto mr-auto" style=" background: #ECE9E7;margin-bottom:10px;text-align:center;"> <a class="btn btn-primary text-white" href="https://pecheperle.be/formulaire-de-sorties-de-peches/ " target="_blank" style="font-size:20px; color:#fff;"> Ajoutes ta journée(tu seras redirigé vers l'autre site)</a> </div> </div> </div> <!-- debut pagination --> <div class="container" style=" max-width: 100%;margin:auto;"> <nav> <ul class="pagination"> <!-- Lien vers la page précédente (désactivé si on se trouve sur la 1ère page) --> <li class="page-item <?= ($currentPage == 1) ? "disabled" : "" ?>"> <a href="?page=<?= $currentPage - 1 ?>" class="page-link"> <span aria-hidden="true">«</span> <span class="sr-only">Previous</span></a> </li> <? //cela ser au calcul de la valeur de la derniere page $finpage = $nbArticles/$parPage ; $finpages= ceil($finpage); ?> <li class="page-item"><a class="page-link " href="?page=<?= $page=1 ?>"><span>1</span></a></li> <li class="page-item navigation_max_widfh_340"><a class="page-link " href="?page=<?= $page=2 ?>"><span>2</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_340"><a class="page-link " href="?page=<?= $page=3 ?>"><span>3</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576"><a class="page-link " href="?page=<?= $page=4 ?>"><span>4</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576"><a class="page-link " href="?page=<?= $page=5 ?>"><span>5</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576"><a class="page-link " href="?page=<?= $page=6 ?>"><span>6</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576"><a class="page-link " href="?page=<?= $page=7 ?>"><span>7</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576"><a class="page-link " href="?page=<?= $page=8 ?>"><span>8</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576"><a class="page-link " href="?page=<?= $page=9 ?>"><span>9</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576 navigation_max_widfh_576_and_768"><a class="page-link " href="?page=<?= $page=10 ?>"><span>10</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576 navigation_max_widfh_576_and_768"><a class="page-link " href="?page=<?= $page=11 ?>"><span>11</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576 navigation_max_widfh_576_and_768"><a class="page-link " href="?page=<?= $page=12 ?>"><span>12</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576 navigation_max_widfh_576_and_768 navigation_max_widfh_768_and_992"><a class="page-link " href="?page=<?= $page=13 ?>"><span>13</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576 navigation_max_widfh_576_and_768 navigation_max_widfh_768_and_992"><a class="page-link " href="?page=<?= $page=14 ?>"><span>14</span></a></li> <li class="page-item navigation_max_widfh_340 navigation_max_widfh_576 navigation_max_widfh_576_and_768 navigation_max_widfh_768_and_992"><a class="page-link " href="?page=<?= $page=15 ?>"><span>15</span></a></li> <li class="page-item page-link navigation_max_widfh_992_and_1200 navigation_max_widfh_1200" href="?page=<?= $page=30000 ?>"><span>...</span></li> <li class="page-item"><a class="page-link " href="?page=<?= $finpages ?>"><span><? echo $finpages ;?></span></a></li> <!-- Lien vers la page suivante (désactivé si on se trouve sur la dernière page) --> <li class="page-item <?= ($currentPage == $pages) ? "disabled" : "" ?>"> <a href="?page=<?= $currentPage + 1 ?>" aria-label="Next" class="page-link"><span aria-hidden="true">»</span> <span class="sr-only">Next</span></a> </li> </ul> </nav> </div> <?php echo $currentPage; ?> <!-- titre des colonnes de pagination --> <div class="container" style=" max-width: 100%;margin:auto;"> <div class="row"> <div class="col-md-1" style="background: green;"> <h5 class="title text-center">Lien</h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=date_asc" <?php echo ($sort == "date_asc") ? "selected" : ""; ?>>Trier par date (ascendant)</option> <option value="?sort=date_desc" <?php echo ($sort == "date_desc") ? "selected" : ""; ?>>Trier par date (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=nbre_prises_asc" <?php echo ($sort == "nbre_prises_asc") ? "selected" : ""; ?>>Trier par Nbre de prises (ascendant)</option> <option value="?sort=nbre_prises_desc" <?php echo ($sort == "nbre_prises_desc") ? "selected" : ""; ?>>Trier par Nbre de prises (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=titre_asc" <?php echo ($sort == "titre_asc") ? "selected" : ""; ?>>Trier par titre (ascendant)</option> <option value="?sort=titre_desc" <?php echo ($sort == "titre_desc") ? "selected" : ""; ?>>Trier par titre (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=auteur_asc" <?php echo ($sort == "auteur_asc") ? "selected" : ""; ?>>Trier par pseudo (ascendant)</option> <option value="?sort=auteur_desc" <?php echo ($sort == "auteur_desc") ? "selected" : ""; ?>>Trier par pseudo(descendant)</option> </select> </div> </h5> </div> </div> </div> <div class="container" style=" max-width: 100%;margin:auto;"> <!-- debut pied de page--> <?php include("../include/pied-de-page.php"); ?> <?php include("../include/footer.php"); ?> </div> </div> </body> <!-- fin du body--> </html>
- Le tri de mes colonnes ne s'effectue pas correctement
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Comment faire des colonnes sur word - Guide
- Excel trier plusieurs colonnes en même temps - Guide
- Logiciel tri photo - Guide
- Inverser deux colonnes excel - Guide
3 réponses
Si tu parles de cette requête :
$sql = "SELECT a.post_title ,a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as intro,d.meta_value as espace, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY post_date DESC LIMIT :premier, :parpage ; "; $sort = "date_desc"; if (isset($_GET['sort'])) { $sort = $_GET['sort']; } if ($sort == "date_asc") { $sql .= " ORDER BY a.post_date ASC"; } else if ($sort == "date_desc") { $sql .= " ORDER BY a.post_date DESC"; }
Je constate que tu ajouter du contenu à ta chaine après le ;
Essayes d'afficher la requête SQL réellement compilée avec par exemple
echo $sql;
Car il me semble que tu obtiendra un truc du genre :
SELECT ... FROM ... WHERE ... ORDER BT post_date DESC LIMIT .. ; ORDER BY a.postdate DESC
Ou un truc du genre.
merci pour la reponse
oui en effet je parle bien de cette requete et lorsque je retire ce morceau de code jen'ai plus de pagination mais le tri de chaque colonne s'effectue bien
ORDER BY post_date DESC LIMIT :premier, :parpage ;
Bonjour Jordane,
Merci pour ton aide, mais j'ai déjà appliqué cette solution.
Malheureusement, cela ne fonctionne pas.
Lorsque je suis sur la première page, tout fonctionne bien et le tri de chaque colonne s'effectue correctement.
Mais dès que je passe à la page 2 ou suivantes, le tri est inactif, sauf pour la date ou cela fonctionne sur toutes les pages
voici ma requete
// Requête $sql = "SELECT a.post_title, a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as titre, d.meta_value as nbre_prises, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish'"; $sort = "date_desc"; if (isset($_GET['sort'])) { $sort = $_GET['sort']; } if ($sort == "date_asc") { $sql .= " ORDER BY a.post_date ASC"; } else if ($sort == "date_desc") { $sql .= " ORDER BY a.post_date DESC"; } else if ($sort == "nbre_prises_asc") { $sql .= " ORDER BY CAST(d.meta_value AS UNSIGNED) ASC"; // Tri par nombre de prises (converti en nombre) } else if ($sort == "nbre_prises_desc") { $sql .= " ORDER BY d.meta_value+0 DESC"; } else if ($sort == "titre_asc") { $sql .= " ORDER BY c.meta_value ASC"; // Tri par titre (en ordre alphabétique) } else if ($sort == "titre_desc") { $sql .= " ORDER BY c.meta_value DESC"; } else if ($sort == "auteur_asc") { $sql .= " ORDER BY u.display_name ASC"; } else if ($sort == "auteur_desc") { $sql .= " ORDER BY u.display_name DESC"; } $sql .= " LIMIT :premier, :parpage"; // On prépare la requête $query = $bdd->prepare($sql); $query->bindValue(':premier', $premier, PDO::PARAM_INT); $query->bindValue(':parpage', $parPage, PDO::PARAM_INT); // On exécute $query->execute();
et voici pour rappel comment sont construis le tri pour chaque colonne
<!-- titre des colonnes de pagination --> <div class="container" style=" max-width: 100%;margin:auto;"> <div class="row"> <div class="col-md-1" style="background: green;"> <h5 class="title text-center">Lien</h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=date_asc" <?php echo ($sort == "date_asc") ? "selected" : ""; ?>>Trier par date (ascendant)</option> <option value="?sort=date_desc" <?php echo ($sort == "date_desc") ? "selected" : ""; ?>>Trier par date (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=nbre_prises_asc" <?php echo ($sort == "nbre_prises_asc") ? "selected" : ""; ?>>Trier par Nbre de prises (ascendant)</option> <option value="?sort=nbre_prises_desc" <?php echo ($sort == "nbre_prises_desc") ? "selected" : ""; ?>>Trier par Nbre de prises (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=titre_asc" <?php echo ($sort == "titre_asc") ? "selected" : ""; ?>>Trier par titre (ascendant)</option> <option value="?sort=titre_desc" <?php echo ($sort == "titre_desc") ? "selected" : ""; ?>>Trier par titre (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=auteur_asc" <?php echo ($sort == "auteur_asc") ? "selected" : ""; ?>>Trier par pseudo (ascendant)</option> <option value="?sort=auteur_desc" <?php echo ($sort == "auteur_desc") ? "selected" : ""; ?>>Trier par pseudo(descendant)</option> </select> </div> </h5> </div> </div> </div>
Merci pour le retour jordane
voici ce que me donne l'echo
SELECT a.post_title, a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as titre, d.meta_value as nbre_prises, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY a.post_date DESC LIMIT 10;
j'ai executer ce code dans phpmyadmin
la requete est sortie exacte
Merci pour l'aide
*si j'essaye de trier par exemple le nombre de prise voici ce que j'ai en restant sur la premiere page ou le tri s'effectue normalement
SELECT a.post_title, a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as titre, d.meta_value as nbre_prises, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY CAST(d.meta_value AS UNSIGNED) ASC LIMIT :premier, :parpage
lorsque je bascule sur la deuxieme page voici le resultat de l'echo pour le nombre de prise
SELECT a.post_title, a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as titre, d.meta_value as nbre_prises, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY a.post_date DESC LIMIT :premier, :parpage
on voir qu 'il est revenu a post_date pour le tri