Problème PHP - Espace commentaire
- Accueil
- Forum
- Programmation
- PHP
- Problème PHP - Espace commentaire
PaulLavieille Le 27 mai 2016 à 19:35 (Édité le 25 janvier 2019 à 17:51)
J'essaye actuellement de faire un espace commentaire sur mon site et j'ai besoin d'aide !
Ma table membres contient :
http://i.imgur.com/V6mtq4Y.png
Ma table comments contient :
http://i.imgur.com/EMdI4NV.png
Mon code :
<?php
/**
* Ce fichier affichera les commentaires directement pour l'exemple
* pour ne pas avoir à tout refaire mais c'est à adapter bien sûre ^^
*/
// Charge notre fichier qui nous connecte à la bdd
require __DIR__.'/inc/db.php';
// On effectue notre requête qui prends tout les commentaires
// trié par ordre décroissant via la date d'ajout (posted_at)
// On y ajoute les informations de notre utilisateur qui à envoyer
// le commentaire en question.
$comments = $db->prepare('SELECT comments.id as comment_id, content, posted_at, membres.id as user_id, pseudo, mail FROM comments LEFT JOIN membres ON membres.id = comments.user_id WHERE page = ? ORDER BY posted_at DESC');
$comments->execute(array($_GET['id']));
var_dump($comments);
// Quand on ajout un commentaire on vérifie d'abord aussi qu'il est en session
if (!empty($_SESSION['id']) && !empty($_POST)) {
$content = !empty($_POST['content']) ? $_POST['content'] : null;
$errors = [];
if (empty($errors)) {
// On prépare la requête avec des tag pour nos valeurs
$insertComment = $db->prepare('
INSERT INTO
comments( content, posted_at, user_id)
VALUES (:content, NOW(), :userId)');
$insertComment->bindValue(':content', $content, PDO::PARAM_STR);
$insertComment->bindValue(':userId', $_SESSION['id']['id'], PDO::PARAM_INT);
$insertComment->execute();
$_SESSION['flash'] = [
'type' => 'success',
'content' => 'Vous êtes maintenant connecté !'
];
header('location: /index.php');
exit;
} else {
// Tu peux mettre ce que tu veux
$_SESSION['flash'] = [
'type' => 'danger',
'content' => 'Vous avez des erreurs dans le formulaire'
];
header('location: /index.php');
exit;
}
}
?>
<!--
On peut utiliser le foreach sur la variable $comments
Cela revient à faire un while :
while ($comment = $comments->fetch()) {}
-->
<h1>Les commentaires</h1>
<?php if (!empty($_SESSION['id'])): ?>
<h2><em><a href="disconnect.php">Se déconnecter</a></em></h2>
<?php else: ?>
<h2><em><a href="register.php">S'inscire</a></em> - <em><a href="login.php">Se connecter</a></em></h2>
<?php endif; ?>
<div class="comments">
<?php foreach ($comments as $comment): ?>
<div class="comment">
<h4>
<!-- Avec htmlentities j'empêche les failles XSS -->
le <?= DateTime::createFromFormat('Y-m-d H:i:s', $comment['posted_at'])->format('d/m/Y H:i:s') ?>
</h4>
<p>
<?= nl2br(htmlentities($comment['content'])) ?>
</p>
</div>
<?php endforeach; ?>
</div>
<!-- Formulaire pour l'ajout du commentaire quand on est connecté -->
<?php if (!empty($_SESSION['id'])): ?>
<form action="index.php" method="post">
<label for="content">Votre message :</label><br>
<textarea name="content" id="content" cols="30" rows="10" placeholder="Votre message ..."></textarea><br>
<button type="submit">Envoyer le commentaire</button>
</form>
<?php endif; ?>
<?php
?>
Merci 😄
J'ai pas mal d'erreur au niveau de la connexion !
joris1904 Le 4 juin 2016 à 09:31 (Édité le 1 janvier 1970 à 01:00)