Bonjour,
Dans le cadre de mon projet 3, j'essaie d'enregistrer des commentaires dans mes billets. J'ai beau relire mon code, je ne vois pas où cela cloche. A chaque fois que je veux enregistrer un commentaire, je me retrouve face au message d'erreur "Erreur : aucun identifiant de billet envoyé" (indiqué dans l'index).
J'indique pourtant dans la vue le chemin :
Et dans le formulaire, j'ai tt de même rajouté un champs caché pour rappeler l'id du post >> <input type="hidden" name="post_id" value="<?php $_GET['post_id'] ?>" >
Code : Sélectionner tout - Visualiser dans une fenêtre à part <form action="index.php?action=addComment&id=<?= $data['post_id'] ?>" method="post">
Rien n'y fait !
Savez-vous pourquoi je n'arrive pas à récupérer l'id du post ?
Voici ma requête dans le modele :
Voici ma requête dans le contrôleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public function postComment($postId, $comauthor, $comcontent) { $db = $this->dbConnect(); $comment = $db->prepare('INSERT INTO comment(post_id, com_author, com_content, com_date) VALUES(?, ?, ? NOW())'); $affectedLines = $comment->execute(array($postId, $comauthor, $comcontent)); return $affectedLines; }
Voici ma vue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 function addComment($postId, $comauthor, $comcontent) { $affectedLines = postComment($postId, $comauthor, $comcontent); if ($affectedLines === false) { die('Impossible d\'ajouter le commentaire !'); } else { header('Location: index.php?action=post&id=' . $postId); } }
Enfin, voici l'index.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
66 <?php $title = 'Billet simple pour l\'Alaska'; ?> <?php ob_start(); ?> <?php while ($data = $post->fetch()) { ?> <?= htmlspecialchars($data['post_title']) ?><br> publié le <?= $data['post_date_fr'] ?> <p> <?= nl2br(htmlspecialchars($data['post_content'])) ?> </p> <h2>Commentaires</h2> <?php while ($comment = $comments->fetch()) { ?> <?= 'Par ' . htmlspecialchars($comment['com_author']) .'' ?><br> Le <?= $comment['com_date_fr'] ?> <p> <?= nl2br(htmlspecialchars($comment['com_content'])) ?> </p> <?php } $comments->closeCursor(); ?> <?php } $post->closeCursor(); ?> <form action="index.php?action=addComment&id=<?= $data['post_id'] ?>" method="post"> <input type="hidden" name="post_id" value="<?php $_GET['post_id'] ?>" > <fieldset> <table> <legend>Ajoutez un commentaire</legend> <tr><td><label>Votre prénom / pseudo : </label></td><td><input type="text" name="com_author" size="92"></td></tr> <br/> <tr><td><label>Votre commentaire : </label></td><td><textarea type="text" name="com_content" rows="8" cols="90"></textarea></td></tr> <tr><td><input type="submit" value="Envoyez"></td></tr> </table> </fieldset> </form> <br/> <a href="index.php?action=listPosts">Découvrez les autres chapitres !</a> <?php $content = ob_get_clean(); ?> <?php require('template.php'); ?>
J'espère que vous pourrez m'aider !
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 <?php require('controler/frontend.php'); try { if (isset($_GET['action'])) { // afficher l'ensemble des chapitres dans ChapterView if ($_GET['action'] == 'listPosts') { listPosts(); } // afficher le chapitre en entien dans postView elseif ($_GET['action'] == 'post') { if (isset($_GET['id']) AND $_GET['id'] > 0) { post(); } else { throw new Exception('Aucun identifiant de billet envoyé'); } } elseif ($_GET['action'] == 'addComment') { if (isset($_GET['id']) && $_GET['id'] > 0) { if (!empty($_POST['com_author']) && !empty($_POST['com_content'])) { addComment($_GET['id'], $_POST['com_author'], $_POST['com_content']); } else { echo 'Erreur : tous les champs ne sont pas remplis !'; } } else { echo 'Erreur : aucun identifiant de billet envoyé'; } }
Merci d'avance !
Vanessa
Partager