Ma pagination ne fonctionne pas

Résolu/Fermé
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - 7 déc. 2021 à 10:17
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - 7 déc. 2021 à 23:00
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

jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024 4 705
7 déc. 2021 à 18:18
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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
7 déc. 2021 à 19:12
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
jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024 4 705
7 déc. 2021 à 19:32
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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
Modifié le 7 déc. 2021 à 20:06
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
jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024 4 705
7 déc. 2021 à 20:20
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
Modifié le 7 déc. 2021 à 20:31
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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
7 déc. 2021 à 20:32
donc tout est regle enfin je pense

un immense merci jordane
je ne clôture pas encore ...
0
jordane45 Messages postés 38317 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024 4 705
7 déc. 2021 à 22:16
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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
7 déc. 2021 à 23:00
Voila jordane tout fonctionne a merveille
je dois encore tester le responsive

encore un très grand merci
0