Bonjour,
Je suis débutante. Je travaille sur l'architecture MVC en PHP. J'ai créé une fonctionnalité qui vise à modifier un commentaire. Mais, je ne comprends pas pourquoi, autant la fonctionnalité "Ajouter un commentaire" fonctionne, autant ma fonctionnalité "Modifier le commentaire" ne donne pas les résultats escomptés. Je pense qu'il y a un souci avec le lien de la fonction modifyComment dans mon fichier frontend.php mais je ne comprends pas vraiment quel est le problème.
Lorsque j'ai terminé de rentrer les informations pour modifier un commentaire et que je le soumets, je reçois le message suivant : "Erreur : Aucune ID envoyée" pourtant je cherche à transmettre l'id dans le lien... C'est pourquoi, je pense que mon lien pose problème mais je ne vois pas ce qui cloche. A ce stade, je pense que le lien n'étant pas correct, cela bloque pour revenir sur la bonne page et enregistrer les données en base à moins qu'il n'y ait encore d'autres soucis... Je joins l'ensemble du code à toutes fins utiles. En db, pour la table "comments", j'ai les champs, id, postId, author, comment et comment_date. Pour la table "posts", j'ai les champs : author, content, creation_date, id et title.
Je remercie beaucoup par avance ceux qui voudront bien regarder mon (long, désolée) code. Je planche depuis de nombreux jours sur ce code et je ne vois vraiment plus comment le faire fonctionner.
index.php :
frontend.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 <?php if(!empty($_GET['id'])) { setcookie("cookie_id", $_GET['id'], time()+24*3600*365, null, null, false, true); session_start(); } require('controller/frontend.php'); try { if(isset($_GET['action'])) { // CAS 1 - liste des billets if ($_GET['action'] == 'listPosts') { listPosts(); } // CAS 2 - affichage d'un billet elseif ($_GET['action'] == 'post') { if (isset($_GET['id']) && $_GET['id'] > 0) { post(); } else { throw new Exception('Aucun identifiant de billet envoyé'); } } // CAS 3 - ajouter un commentaire elseif ($_GET['action'] == 'addComment') { if (isset($_GET['id']) && $_GET['id'] > 0) { if (!empty($_POST['author']) && !empty($_POST['comment'])) { addComment($_GET['id'], $_POST['author'], $_POST['comment']); } else { throw new Exception('Tous les champs ne sont pas remplis !'); } } else { throw new Exception('Aucun identifiant de billet envoyé'); } } // CAS 4 - Modifier un commentaire elseif($_GET['action'] == 'modifyComment') // $ post partout au lieu de $ get pour l'id car récupé dans formulaire { if(!empty($_POST['id']) && !empty($_POST['author']) && !empty($_POST['comment'])) { $id = $_POST['id']; $_COOKIE['cookie_id'] = $id; modifyComment($_POST['id'], $_POST['author'], $_POST['comment']); } else if(empty($_POST['id'])) { throw new Exception('Aucune ID envoyée'); } else { throw new Exception('Tous les champs ne sont pas remplis'); } } } else { listPosts(); } } catch(Exception $e) { echo 'Erreur : ' . $e->getMessage(); }
updateComment.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 <?php // Chargement des classes require_once('model/PostManager.php'); require_once('model/CommentManager.php'); function listPosts() { $postManager = new \Laure\MVC\Model\PostManager(); $posts = $postManager->getPosts(); require('view/frontend/listPostsView.php'); } function post() { $postManager = new \Laure\MVC\Model\PostManager(); $commentManager = new \Laure\MVC\Model\CommentManager(); $post = $postManager->getPost($_GET['id']); $comments = $commentManager->getComments($_GET['id']); require('view/frontend/postView.php'); } function addComment($postId, $author, $comment) { $commentManager = new \Laure\MVC\Model\CommentManager(); $affectedLines = $commentManager->postComment($postId, $author, $comment); if($affectedLines === false) { throw new Exception('Impossible d\'ajouter le commentaire !'); } else { header('Location:index.php?action=post&id=' . $postId); } } function modifyComment($postId, $id, $author, $comment) { $commentManager = new \Laure\MVC\Model\CommentManager(); $affectedComment = $commentManager->editComment($postId, $id, $author, $comment); if($affectedComment === false) { throw new Exception('Erreur lors du remplacement du commentaire !'); } else { // lien qui semble poser problème, l'id ne suis pas sur la page UpdateComment après soumission du formulaire, toujours rien en bdd et dans la liste des comments header('Location:index.php?action=post&id=' . $id.'&postId='.postId); } }
CommentManager.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 <?php session_start(); ?> <?php require('../../model/CommentManager.php'); ?> <?php $title = 'Modification de commentaire'; ?> <?php ob_start(); ?> <h1>Mon super blog !</h1> <p><a href="/architecture_en_mvc/index.php">Retour à la liste des billets</a></p> <h2>Modification du commentaire</h2> <!-- modif 2 apportée mercredi soir 22 05 19 : post_id au lieu d'id pour le lien ci-dessous : --> <form action="/architecture_en_mvc/index.php?action=modifyComment&id=<?php echo $_GET['id'];?>" method="post"> <!--<div> --> <!-- modif 1 apportée mercredi soir 22 05 19 : ajout de la demande de l'id du post dans le formulaire : champs à mettre en hidden peut être plus tard --> <!-- <label for="post_id">Identifiant du billet</label> <br/> <input type="text" id="post_id" name="post_id" /> </div> --> <div> <label for="author">Auteur</label><br /> <input type="text" id="author" name="author" /> </div> <div> <label for="comment">Commentaire</label><br /> <textarea id="comment" name="comment"></textarea> </div> <div> <input type="submit" value="Envoyer" name="submit"/> </div> </form> <?php $content = ob_get_clean(); ?> <?php require('template.php'); ?>
postView.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 <?php namespace Laure\MVC\Model; //attention : conséquences potentielles : j'ai enlevé la majuscule erronée au début de manager.Php require_once("manager.php"); class CommentManager extends Manager { public function getComments($postId) { $db = $this->dbConnect(); $comments = $db->prepare('SELECT id, author, comment, DATE_FORMAT(comment_date, \'%d/%m/%Y à %Hh%imin%ss\') AS comment_date_fr FROM comments WHERE post_id = ? ORDER BY comment_date DESC'); $comments->execute(array($postId)); return $comments; } public function postComment($postId, $author, $comment) { $db = $this->dbConnect(); $comments = $db->prepare('INSERT INTO comments(post_id, author, comment, comment_date) VALUES(?, ?, ?, NOW())'); $affectedLines = $comments->execute(array($postId, $author, $comment)); return $affectedLines; } public function editComment($author, $comment, $postId, $id) { $db = $this->dbConnect(); $modif_comment = $db -> prepare('UPDATE comments SET author = :author, comment = :comment, postId = :postId WHERE id = :id'); $affectedComment = $modif_comment->execute(['author' => $author, 'comment' => $comment, 'postId' => $postId, 'id' => $id]); return $affectedComment; } }
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 <?php $title = htmlspecialchars($post['title']); ?> <?php ob_start(); ?> <h1>Mon super blog !</h1> <p><a href="index.php">Retour à la liste des billets</a></p> <div class="news"> <h3> <?= htmlspecialchars($post['title']) ?> <em>le <?= $post['creation_date_fr'] ?></em> </h3> <p> <?= nl2br(htmlspecialchars($post['content'])) ?> </p> </div> <h2>Commentaires</h2> <form action="index.php?action=addComment&id=<?= $post['id'] ?>" method="post"> <div> <label for="author">Auteur</label><br /> <input type="text" id="author" name="author" /> </div> <div> <label for="comment">Commentaire</label><br /> <textarea id="comment" name="comment"></textarea> </div> <div> <input type="submit" /> </div> </form> <!-- Ajout d'un input de type hidden avec comme name : id et tu lui définies comme valeur l'id du commentaire. --> <input type="hidden" name="id" value="<?php echo $_COOKIE['cookie_id'] ;?>"/> <?php while ($comment = $comments->fetch()) { ?> <p><strong><?= htmlspecialchars($comment['author']) ?></strong> le <?= $comment['comment_date_fr'] ?> <a href="view/frontend/updateComment.php?id=<?php echo $post['id']; ?>" >(modifier) </a> </p> <p><?= nl2br(htmlspecialchars($comment['comment'])) ?></p> <?php } ?> <?php $content = ob_get_clean(); ?> <?php require('view/frontend/template.php'); ?>
Partager