MVC PHPNouvelle fonctionnalité
Utilisez une architecture MVC en PHP : Proposer des commentaires
Ajouter des commentaires
Cette fois, on aimerait permettre aux lecteurs d'ajouter des commentaires sur les billets. Que faut-il faire ? On va faire les choses dans cet ordre :- Écrire le modèle (et créer au besoin des tables en base).
 - Écrire le contrôleur, pour récupérer les informations et les envoyer à la vue.
 - Écrire la vue, pour afficher les informations.
 - Mettre à jour le routeur, pour envoyer vers le bon contrôleur.
 
Ecriture du modèle
Il suffit d'ajouter une petite fonction postComment dans model/frontend.php qui ajoute un commentaire en base :model/frontend.php :
<?php
//...
function postComment($postId, $author, $comment) {
    $db = dbConnect();
    $comments = $db->prepare('INSERT INTO comments(post_id, author, comment, comment_date) VALUES(?, ?, ?, NOW())');
    $affectedLines = $comments->execute(array($postId, $author, $comment));
    return $affectedLines;
}Rien de bien sorcier. Il faut juste penser à récupérer en paramètres les informations dont on a besoin :
- L'ID du billet auquel se rapporte le commentaire
 - Le nom de l'auteur
 - Le contenu du commentaire
 
Écriture du contrôleur
Le contrôleur controller/frontend.php récupère lui aussi les informations dont on a besoin (id du billet, auteur, commentaire) et les transmet au modèle :controller/frontend.php
<?php
// ...
function addComment($postId, $author, $comment) {
    $affectedLines = postComment($postId, $author, $comment);
    if ($affectedLines === false) {
        die('Impossible d\'ajouter le commentaire !');
    }
    else {
        header('Location: index.php?action=post&id=' . $postId);
    }
}Mise à jour de la vue
Il faut aussi modifier un peu la vue qui affiche un billet et ses commentaires (view/frontend/postView.php). En effet, nous devons ajouter le formulaire pour pouvoir envoyer des commentaires !view/frontend/postView.php :
<!-- ... -->
<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>
<!-- ... -->Mise à jour du routeur
Ajoutons un elseif dans notre routeur (index.php) pour appeler le nouveau contrôleur addComment qu'on vient de créer, et on devrait avoir tout bon !index.php :
<?php
require('controller/frontend.php');
if (isset($_GET['action'])) {
    if ($_GET['action'] == 'listPosts') {
        listPosts();
    }
    elseif ($_GET['action'] == 'post') {
        if (isset($_GET['id']) && $_GET['id'] > 0) {
            post();
        }
        else {
            echo 'Erreur : aucun identifiant de billet envoyé';
        }
    }
    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 {
                echo 'Erreur : tous les champs ne sont pas remplis !';
            }
        }
        else {
            echo 'Erreur : aucun identifiant de billet envoyé';
        }
    }
}
else {
    listPosts();
}

