Bonjour,
Je réalise un exercice qui consiste à avoir :
- une page (accueil.php) qui affiche la liste des 5 derniers articles ajoutés en base de données;
- une page (TestComments.php) qui affiche le contenu d'un -seul- article choisi et les commentaires qui y sont associés qui sont également en base de données.
Mon problème, mes requêtes chargées d'afficher chaque article et ses commentaires ne semblent pas fonctionner. En fait, les informations ne sont pas récupérées. A l'affichage, je n'ai pas d'erreur, mais les variables titre, commentaire, auteur, date n'apparaissent pas. A mes yeux, le problème serait peut-être au niveau du SELECT ....WHERE id = ? j'ai tenté de mettre plutôt WHERE id = :id mais là j'ai une erreur 'sqlstate hy093 invalid parameter number parameter was not defined'. J'ai beau cherché je ne vois pas comment écrire cette requête convenablement. Merci de votre aide.
P.S.: J'ai créé les entrées des articles et des commentaires manuellement sur PHPMyAdmin, je fais quelque chose de basique pour l'instant. Mais je suis bloquée...pour l'instant
J'ai mis une capture d'écran de ma page TestComments.php pour illustrer mon problème.
accueil.php
Code html : 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 <!DOCTYPE html> <html lang="fr" dir="ltr"> <head> <meta charset="utf-8"> <title>Mon Super Blog</title> <link rel="stylesheet" href="blog_style.css"> </head> <body> <h1>Bienvenu(e) sur mon Super-Blog et le vôtre ;) !!!</h1><br><br><br> <p>Derniers articles postés :</p><br> <?php try { $connexion = new PDO('mysql:host=localhost;dbname=test_db_classroom;charset=utf8', '', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); // echo "Sandrine, you are well connected to your database ! <br /><br />"; } catch(Exception $e) { die("Erreur : " . $e->getMessage()); } // Récupération des 5 derniers articles. $requete = $connexion->query('SELECT titre, contenu, DATE_FORMAT(date_creation, "%d/%m/%Y à %Hh%imin%ss") AS all_date_creation, auteur FROM articles_blog ORDER BY date_creation DESC LIMIT 0, 5'); while ($reponse = $requete->fetch()) { ?> <div class="news"> <h3> <?php echo htmlspecialchars($reponse['titre']); ?> <em><?php echo "publié le " . $reponse['all_date_creation'] . " par " . $reponse['auteur']; ?></em> </h3> <p> <?php // Affichage d'un seul article. echo htmlspecialchars($reponse['contenu']); ?> <br> <em><a href="TestComments.php?article=<?php echo $reponse['id']; ?>">Commentaires</a></em> </p> </div> <?php } // Fin de la boucle 'while fetch' $requete->closeCursor(); ?> </body> </html>
TestComments.php
Code html : 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 <!DOCTYPE html> <html lang="fr" dir="ltr"> <head> <meta charset="utf-8"> <title>Super-Blog / Voir l'article</title> <link rel="stylesheet" href="blog_style.css"> </head> <body> <h1>Les réactions sur cet article.</h1><br><br><br> <p><a href="accueil.php">Retour sur la liste des articles</a></p><br> <?php try { $connexion = new PDO('mysql:host=localhost;dbname=test_db_classroom;charset=utf8', '', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); // echo "Sandrine, you are well connected to your database ! <br /><br />"; } catch(Exception $e) { die("Erreur : " . $e->getMessage()); } // Affichage d'un article à la fois: titre + contenu. $requete = $connexion->prepare('SELECT id, titre, contenu, DATE_FORMAT(date_creation, "%d/%m/%Y à %Hh%imin%ss") AS all_date_creation, auteur FROM articles_blog WHERE id = ?'); $requete->execute(array($_GET['article'])); $reponse = $requete->fetch(); ?> <div class="news"> <h3> <?php echo htmlspecialchars($reponse['titre']); ?> <em>publié le <?php echo $reponse['all_date_creation'] . " par " . htmlspecialchars($reponse['auteur']); ?></em> </h3> <p> <?php // Affichage d'un seul article. echo htmlspecialchars($reponse['contenu']); ?> </p> </div> <h2>Commentaires</h2><br> <?php $requete->closeCursor(); // on libère le curseur juste avant d'entamer la requete suivante. $requete = $connexion->prepare('SELECT auteur, commentaire, DATE_FORMAt(date_commentaire, "%d/%m/%Y à %Hh%imin%ss") AS all_date_commentaire FROM commentaires_blog WHERE id_articles = ? ORDER BY date_commentaire'); $requete->execute(array($_GET['article'])); while ($reponse = $requete->fetch()) { ?> <p><?php echo "<strong>" . htmlspecialchars($reponse['auteur']) . "</strong>" . " le " . $reponse['all_date_commentaire'] . "<br />" . htmlspecialchars($reponse['commentaire']); ?></p> <?php } $requete->closeCursor(); ?> </body> </html>
Partager