Bonjour à tous,
Voilà je vous expose mon soucis. Je fonctionne avec 2 pages php :
- l'une affiche une liste de 3 articles avec un système de pagination (blog.php)
- l'autre affiche les commentaires liés à un article (sur lequel on a cliqué)
La pagination des articles est terminée mais je rencontre des problèmes sur la pagination des commentaires. Je pense que le problème réside dans la liaison entre les commentaires et le billet qui leur est associé.
Voici le code des 2 fichiers :
Blog.php
commentaires.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link type="text/css" rel="stylesheet" href="styles.css"> <title>TP Blog</title> </head> <body> <h1>TP Blog amélioré</h1> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?> <?php $limite = 3; $page = (!empty($_GET['page']) ? $_GET['page'] : 1); // Définition d'un numéro de page par défaut $debut = ($page - 1) * $limite; // On calcule le numéro du premier élément à récupérer // PARTIE REQUETE DES BILLETS $requete = 'SELECT id, titre, contenu, DAY(date_creation) AS jour, MONTH(date_creation) AS mois, YEAR(date_creation) AS annee FROM billets ORDER BY date_creation DESC LIMIT :limite OFFSET :debut'; $reponse = $bdd->prepare($requete); $reponse->bindValue( 'limite', // Le marqueur est nommé limite $limite, // Il doit prendre la valeur de la variable $limite PDO::PARAM_INT // Cette valeur est de type entier ); $reponse->bindValue( 'debut', // Le marqueur est nommé limite $debut, // Il doit prendre la valeur de la variable $limite PDO::PARAM_INT // Cette valeur est de type entier ); $reponse->execute(); while ($billets = $reponse->fetch()) {?> <div class="news"> <h3> <?php echo $billets['titre'];?> publié le <?php echo $billets['jour'];?>/<?php echo $billets['mois'];?> - <?php echo $billets['annee'];?> </h3> <p><?php echo $billets['contenu']; ?><br><a href="commentaires.php?billet=<?php echo $billets['id'];?>">Commentaires</a></p> </div> <?php } $reponse->closeCursor(); ?> <a href="blog.php?page=<?php echo $page - 1; ?>">Page précédente</a> <a href="blog.php?page=<?php echo $page + 1; ?>">Page suivante</a> </body> </html>
A l'affichage, je n'ai aucune erreur. Les commentaires affichés ne correspondent à l'article en question et et leur affichage ne correspond pas à ce que je veux car je n'en vois qu'un par page (au lieu de 3 par page).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="styles.css"> <title>Commentaires</title> </head> <body> <h1>Liste des commentaires</h1> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?> <?php ?> <?php // AFFICHAGE DU BILLET SELECTIONNE $requete = 'SELECT id, titre, contenu, date_creation, DAY(date_creation) AS jour, MONTH(date_creation) AS mois, YEAR(date_creation) AS annee FROM billets WHERE id = ?'; $reponse = $bdd->prepare($requete); $reponse->execute(array($_GET['billet'])); $leBillet = $reponse->fetch(); ?> <div class="news"> <h3> <?php echo $leBillet['titre'];?> publié le <?php echo $leBillet['jour'];?>/<?php echo $leBillet['mois'];?> - <?php echo $leBillet['annee'];?> </h3> <p><?php echo $leBillet['contenu']; ?></p> </div> <?php $reponse->closeCursor();?> <?php // AFFICHAGE DES COMMENTAIRES $limite = 3; $page = (!empty($_GET['page']) ? $_GET['page'] : 1); // Définition d'un numéro de page par défaut $debut = ($page - 1) * $limite; // On calcule le numéro du premier élément à récupérer $BilletSelection = $_GET['billet']; $requete = 'SELECT id, auteur, commentaire, date_commentaire, DAY(date_commentaire) AS jour, MONTH(date_commentaire) AS mois, YEAR(date_commentaire) AS annee FROM commentaires WHERE :id_billet ORDER BY date_commentaire DESC LIMIT :limite OFFSET :debut'; $reponse = $bdd->prepare($requete); $reponse->bindValue( 'id_billet', $_GET['billet'], PDO::PARAM_INT ); $reponse->bindValue( 'limite', $limite, PDO::PARAM_INT ); $reponse->bindValue( 'debut', $debut, PDO::PARAM_INT ); $reponse->execute(); while ($leCommentaire = $reponse->fetch()) {?> <div class="news">Commentaire de <?php echo htmlspecialchars($leCommentaire['auteur']);?> publié le <?php echo $leCommentaire['jour'];?>/<?php echo $leCommentaire['mois'];?> - <?php echo $leCommentaire['annee'];?></br> <?php echo htmlspecialchars($leCommentaire['commentaire']);?> </div> <?php $reponse->closeCursor(); }?> <a href="commentaires.php?billet=<?php echo $_GET['billet'] ?>&page=<?php echo $page - 1; ?>">Page précédente</a> <a href="commentaires.php?billet=<?php echo $_GET['billet'] ?>&page=<?php echo $page + 1; ?>">Page suivante</a> <p><a href="blog.php">Retour page d'accueil</a></p> </body> </html>
Quelqu'un peut-il m'aider ?
Merci d'avance pour vos conseil en tout cas![]()
Partager