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 :
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.