Problème PHP - Espace commentaire

Suivre ce topic
Ce topic est suivi par : Personne...
PaulLavieille

PaulLavieille Le 27 mai 2016 à 19:35 (Édité le 25 janvier 2019 à 17:51)

Bonjour,

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

joris1904 Le 4 juin 2016 à 09:31

Il est ou le session_start(); ???
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte