6. La classe Comment

La base de données

Ajoutons quelques commentaires dans notre base de données. Nous allons modifier la structure de notre base de données et ajouter une table comment avec des données.

Voici le schéma de notre base de données :

CREATE TABLE `comment` (
   `id` int(11) NOT NULL,
   `pseudo` varchar(100) NOT NULL,
   `content` text NOT NULL,
   `createdAt` datetime NOT NULL,
   `article_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `comment` (`id`, `pseudo`, `content`, `createdAt`, `article_id`) VALUES
(1, 'Jean', 'Génial, hâte de voir ce que ça donne !', '2019-03-16 21:02:24', 1),
(2, 'Nina', 'Trop cool ! depuis le temps', '2019-03-17 17:34:35', 1),
(3, 'Rodrigo', 'Great ! ', '2019-03-17 17:42:04', 1),
(4, 'Hélène', 'je suis heureuse de découvrir un super site ! Continuez comme ça ', '2019-03-18 12:08:37', 2),
(5, 'Moussa', 'Un peu déçu par le contenu pour le moment...', '2019-03-18 03:09:02', 2),
(6, 'Barbara', 'pressée de voir la suite', '2019-03-18 10:05:58', 2),
(7, 'Guillaume', 'Je viens ici pour troller !', '2019-03-19 21:08:44', 3),
(8, 'Aurore', 'Enfin un blog tranquille, où on ne nous casse pas les pieds !', '2019-03-19 21:09:27', 3),
(9, 'Jordane', 'Je suis vendéen ! Amateur de mojettes !', '2019-03-20 10:10:11', 3);

ALTER TABLE `comment`
  ADD PRIMARY KEY (`id`),
  ADD KEY `fk_article_id` (`article_id`);

ALTER TABLE `comment`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;

ALTER TABLE `comment`
  ADD CONSTRAINT `fk_article_id` FOREIGN KEY (`article_id`) REFERENCES `article` (`id`);

J'ai créé le fichier  comments.sql  dans le dossier  sql .

 Dans la suite de ce cours, nous ajouterons de nouveaux commentaires depuis notre application.

Il est temps de passer à la création de notre classe Comment 😄

 

La classe Comment

Nous allons commencer par créer une classe  Comment  dans un fichier  Comment.php  :

<?php

class Comment
{

}

On va créer une première méthode appelée  getCommentsFromArticle  :

<?php

class Comment extends Database
{
    public function getCommentsFromArticle($articleId)
    {
        $sql = 'SELECT id, pseudo, content, createdAt FROM comment WHERE article_id = ? ORDER BY createdAt DESC';
        return $this->createQuery($sql, [$articleId]);
    }
}

Pensez à étendre la classe Comment 😏

On va ici récupérer tous les commentaires associés à un article (qui sera passé en paramètre GET dans la page  single.php  ).

On va modifier la page  single.php  en conséquence :

<?php
//On inclut le fichier dont on a besoin (ici à la racine de notre site)
require 'Database.php';
//Ne pas oublier d'ajouter le fichier Article.php
require 'Article.php';
//Ne pas oublier d'ajouter le fichier Comment.php
require 'Comment.php';
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <title>Mon blog</title>
</head>

<body>
<div>
    <h1>Mon blog</h1>
    <p>En construction</p>
    <?php
    $article = new Article();
    $articles = $article->getArticle($_GET['articleId']);
    $article = $articles->fetch()
    ?>
    <div>
        <h2><?= htmlspecialchars($article->title);?></h2>
        <p><?= htmlspecialchars($article->content);?></p>
        <p><?= htmlspecialchars($article->author);?></p>
        <p>Créé le : <?= htmlspecialchars($article->createdAt);?></p>
    </div>
    <br>
    <?php
    $articles->closeCursor();
    ?>
    <a href="home.php">Retour à l'accueil</a>
    <div id="comments" class="text-left" style="margin-left: 50px">
        <h3>Commentaires</h3>
        <?php
        $comment = new Comment();
        $comments = $comment->getCommentsFromArticle($_GET['articleId']);
        while($comment = $comments->fetch())
        {
            ?>
            <h4><?= htmlspecialchars($comment->pseudo);?></h4>
            <p><?= htmlspecialchars($comment->content);?></p>
            <p>Posté le <?= htmlspecialchars($comment->createdAt);?></p>
            <?php
        }
        $comments->closeCursor();
        ?>
    </div>
</div>
</body>
</html>

Voici le nouvel affichage de notre page  single.php  :


 

Vous voyez qu'on peut utiliser plusieurs requêtes dans la même page, d'où l'utilité de la méthode  checkConnection()  😝

 

Quelques révisions

Si vous avez besoin de revoir certains points, voici les liens en conséquence :

Variables superglobales

 

Bilan

Dans ce chapitre, nous avons ajouté une classe  Comment connectée à notre base de données qui nous permet d'afficher la liste des commentaires sur la page  single.php  avec son article associé.

Vous pouvez retrouver le code associé à ce chapitre sur GitHub.