Ma pagination ne fonctionne pas

Résolu
bonjour a tous

j'ai repris un tuto pour réaliser une pagination
https://nouvelle-techno.fr/articles/mettre-en-place-une-pagination-en-php
mais je me suis retrouve avec un premier soucis avec cette boucle
    foreach($articles as $article){
                        ?>
                            <tr>
                                <td><?= $article['id'] ?></td>
                                <td><?= $article['titre'] ?></td>
                                <td><?= $article['created_at'] ?></td>
                            </tr>
                        <?php
                        }
                        ?>

et également avec ce critère dans la requête created_at

donc après avoir chercher presque toute la nuit j ai un résultat qui apparaît mais la pagination ne fonctionne pas surement a cause de ce created_at

voici mon code si vous pourriez m aider

 <?php
 //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_posts a;";

// 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;
 

//$reponse ancienne valeur SELECT
$sql = "SELECT a.post_title , 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 a.post_title DESC 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();

// On récupère les valeurs dans un tableau associatif
//$articles = $query->fetchAll(PDO::FETCH_ASSOC);

//require_once('close.php');
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body>
<main class="container">
        <div class="row">
            <section class="col-12">
                <h1>Liste des articles</h1>
                <table class="table">
                    <thead>
                        <th>ID</th>
                        <th>Titre</th>
                        <th>Date</th>
                    </thead>
                    <tbody>
                        <?php
                         while ($donnees = $query->fetch()){
                        ?>
                            <tr>
                              <td>  <?php echo $donnees["guid"];  ?></td>
                                <td><?php echo $donnees["level"];  ?> </td>
                                <td><?php echo $donnees ["espace"];  ?> </td>
                                <td><?php echo $donnees ["intro"];  ?> </td>
                               <td> <?php echo $donnees ["a.post_date"];  ?> </td>
                            </tr>
                        <?php
                        }
                        ?>
                    </tbody>
                </table>
                <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">Précédente</a>
                        </li>
                        <?php for($page = 1; $page <= $pages; $page++): ?>
                          <!-- Lien vers chacune des pages (activé si on se trouve sur la page correspondante) -->
                          <li class="page-item <?= ($currentPage == $page) ? "active" : "" ?>">
                                <a href="./?page=<?= $page ?>" class="page-link"><?= $page ?></a>
                            </li>
                        <?php endfor ?>
                          <!-- 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 ?>" class="page-link">Suivante</a>
                        </li>
                    </ul>
                </nav>
            </section>
        </div>
    </main>
</body>
</html>

7 réponses

  1. Modérateur
    Bonjour,

    Quand tu dis que ça ne marche pas ... c'est à dire ?
    Un message d'erreur ?
    Ou quel comportement constaté ?
    Quand tu cliques sur les liens pour changer de page .. que se passe t-il ? Quelle adresse apparait dans la barre de navigation de ton navigateur ?
    As tu essayé de voir si le contenu de tes variables ( en plaçant quelques var_dump.. dans ton code ) correspond à ce que tu attends ?

    1
    1. bonjour Jordane
      Merci pour la réponse
      alors comme on dit une image c est mieux qu'un discours
      voici ce qui ce passe
      la colonne de droite avec les messages d erreur c est du a l essai de pagination avec cette valeur
      <td> <?php echo $donnees ["a.post_date"];  ?> </td>


      voici donc une capture d écran du comportement
      lorsque je clic sur les liens de la pagination cela m envois bien a une page 2 dans l url mais je vois comme résultat l index de mon site

      toutes les valeurs de mes variables sont bonnes donc de ce cote tout est bien récupéré

      0
      1. Modérateur
        Commençons par ton souci de variable
        donc..
        Tu as écrit :
        <td> <?php echo $donnees ["a.post_date"];  ?> </td>
        


        Sachant que pour tes autres variables ( qui fonctionnent) tu as écrit :
         <td>  <?php echo $donnees["guid"];  ?></td>
        <td><?php echo $donnees["level"];  ?> </td>
        <td><?php echo $donnees ["espace"];  ?> </td>
        <td><?php echo $donnees ["intro"];  ?> </td>
        


        Ne vois tu pas la différence ?

        As tu au moins essayé ( comme je te l'ai déjà suggéré ) de faire un var_dump de ta variable ?
        La variable sur laquelle faire ce var_dump étant, bien entendu, $donnees
        var_dump($donnees);
        

        Et donc, en faisant ça .. ne vois tu pas quelle est le "bon" nom de variable à utiliser ?

        Pour ton souci de pagination ( vu qu'à l'origine, c'est ça la question.. )
        Tu dis

        lorsque je clic sur les liens de la pagination cela m envois bien a une page 2 dans l url mais je vois comme résultat l index de mon site

        Donc :
        Avant de cliquer .. quelle est l'url de la page ?
        Une fois cliqué .. que devient l'url ( je veux de vraies valeurs.. pas juste une "explication" )

        A noter que dans
          <a href="./?page=<?= $c
        

        moi je ne mettrai pas de slash ..
          <a href="?page=<?= $c
        

        A moins que ton URL de départ contienne déjà des variables dedans.. et dans ce cas, il faut commencer par récupérer l'url courante et y adjoindre ensuite ta variable page. (pour ça tu peux te baser sur la super globale
        $_SERVER['REQUEST_URI']
        )
        0
        1. waouhhhh jordane
          t est fort quand même tout est presque résolu

          un énorme merci
          variable et pagination , tu avais raison avec le /
          il reste juste un truc qui est assez embêtant c est qu il y a trop de lien de pagination
          une fois que j ai parcouru tous mes articles voici ce qui ce passe
          voir copie d écran

          avec le nombre d article que j ai pour l instant cela devrait s arrêter a la page 16

          et dans mon cas cela va jusque 185

          0
          1. Modérateur
            Pourrais-tu deugger chaque variable qui te sert à gérer ta vie nation en utilisant la fonction Var_dump ???

            Les variables à vérifier etant
            $nbArticles et $pages 
            

            Les valeurs de semblent-elles bonnes ?
            0
        2. Merci jordane pour ton aide

          voici les valeurs

          int(1845) float(185)


          cela voudrais t il dire que cette variable contient 1845 lignes

          $nbArticles = (int) $result['nb'];


          c est bon j'ai trouve
          avec ce code cela fonctionne

          <code php><$sql = 'SELECT COUNT(*) AS nb FROM wp_postmeta WHERE (meta_key = "nombre_dablettes")';/code>
          0
          1. donc tout est regle enfin je pense

            un immense merci jordane
            je ne clôture pas encore ...
            0
            1. Modérateur
              Pourquoi ne pas fermer le sujet ?
              Ta question sur la pagination étant traitée .. si tu as d'autres soucis il te faudra créer un nouveau sujet de toutes façons...
              0
          2. Voila jordane tout fonctionne a merveille
            je dois encore tester le responsive

            encore un très grand merci
            0