Adoptez une architecture MVC

Page blanche lors de la modification d'un commentaire

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

Je vous remercie d’avance pour l’aide que vous m’apporterez car j’ai lu et relu mon code et je ne comprend toujours pas quel est le problème..

Dans ce TP, on nous demande de mettre un lien après chaque commentaire avec la mention "modifier", afin de modifier le commentaire.

Ce lien doit nous amener sur une autre page où un formulaire doit nous permettre de modifier l’auteur du commentaire ainsi que son message.

Tout est OK ! sauf lorsque je clique sur l bouton "valider".

Je suis tombé sur 2 messages en bidouillant un peu :

  • Une page totalement blanche (mais qui redirige bien vers le lien en question), bien que dans mon code je redirige l’utilisateur vers la page de l’article et là rien ne se passe.

  • et la deuxième erreur c’est ce message d’erreur : "Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp64\www\mvc\model\CommentManager.php on line 42"

J’ai déja rencontré ce problème, je devais faire un fetch sur une requête SELECT car la variable en question était un objet, par contre la lorsque je fais un var_dump() de mes variables post,post,comments, ce sont tous les deux des arrays, donc je ne vois pas où est le problème..

J’aimerais si vous le pouvez, m’orienter et ne pas me donner de réponse svp.

Merci d’avance

page index.php

<?php
require('controller/frontend.php');

try {
  if(isset($_GET['action']))
  {
    if ($_GET['action'] == 'listPosts')
    {
      listPosts();
    }
    elseif ($_GET['action'] == 'post')
    {
      if (isset($_GET['id']) && $_GET['id'] > 0)
      {
        post();
      }
      else
      {
        throw new Exception('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
        {
          throw new Exception('Tous les champs ne sont pas remplis !');
        }
      }
    }elseif ($_GET['action'] == "viewComment"){
      if(isset($_GET['comment_id']) && $_GET['comment_id'] > 0){
        viewComment();
      }
    }elseif($_GET['action'] == "updateComment"){
      if (isset($_GET['id']) && $_GET['id'] > 0)
      {
        if (!empty($_POST['author']) && !empty($_POST['comment']))
        {
          updateComment($_GET['id'], $_POST['author'], $_POST['comment'],$_GET['comment_id']);
        }
        else
        {
          throw new Exception('Tous les champs ne sont pas remplis !');
        }
      }
    }else {

    }


  }else {
    listPosts();
  }
} catch(Exception $e) {
  echo 'Erreur : ' . $e->getMessage();
}

controller.php

<?php

// Chargement des classes
require_once('model/PostManager.php');
require_once('model/CommentManager.php');

    function listPosts()
    {
        $postManager = new \OpenClassrooms\Blog\Model\PostManager();
        $posts = $postManager->getPosts();

        require('view/frontend/listPostsView.php');
    }

    function post()
    {
          $postManager = new \OpenClassrooms\Blog\Model\PostManager();
          $commentManager = new \OpenClassrooms\Blog\Model\CommentManager();

          $post = $postManager->getPost($_GET['id']);
          $comments = $commentManager->getComments($_GET['id']);

          require('view/frontend/postView.php');
    }

    function viewComment(){

      $postManager = new \OpenClassrooms\Blog\Model\PostManager();
      $commentManager = new \OpenClassrooms\Blog\Model\CommentManager();

      $post = $postManager->getPost($_GET['id']);
      $comments = $commentManager->getComment($_GET['comment_id']);

    var_dump($comments);

      require "view/frontend/commentView.php";

    }

    function addComment($postId, $author, $comment)
    {
        $commentManager = new \OpenClassrooms\Blog\Model\CommentManager();

        $affectedLines = $commentManager->postComment($postId, $author, $comment);

        if ($affectedLines === false) {
            throw new Exception('Impossible d\'ajouter le commentaire !');
        }
        else {
            header('Location: index.php?action=post&id=' . $postId);
        }
    }

    function updateComment($postId, $author, $comment, $commentId)
    {
        $commentManager = new \OpenClassrooms\Blog\Model\CommentManager();

        $affectedLines = $commentManager->changeComment($postId, $author, $comment, $commentId);

        if ($affectedLines === false) {
            throw new Exception('Impossible de modifier le commentaire !');
        }
        else {
            header('Location: index.php?action=post&id='.$postId);
        }
    }

CommentManager.php

<?php

namespace OpenClassrooms\Blog\Model;
use \PDO;

require_once("model/Manager.php");

class CommentManager extends Manager
{
    public function getComments($postId)
    {
        $db = $this->dbConnect();
        $comments = $db->prepare('SELECT id, author, comment, DATE_FORMAT(comment_date, \'%d/%m/%Y à %Hh%imin%ss\') AS comment_date_fr FROM comments WHERE post_id = ? ORDER BY comment_date DESC');
        $comments->execute(array($postId));

        return $comments;
    }

    public function getComment($commentId)
    {
        $db = $this->dbConnect();
        $comments = $db->prepare('SELECT id, author, comment, DATE_FORMAT(comment_date, \'%d/%m/%Y à %Hh%imin%ss\') AS comment_date_fr FROM comments WHERE id = ? ORDER BY comment_date DESC');
        $comments->execute(array($commentId));
        $data = $comments->fetch();
        return $data;
    }

    public function postComment($postId, $author, $comment)
    {
        $db = $this->dbConnect();
        $comments = $db->prepare('INSERT INTO comments(post_id, author, comment, comment_date) VALUES(?, ?, ?, NOW())');
        $affectedLines = $comments->execute(array($postId, $author, $comment));

        return $affectedLines;
    }

    public function changeComment($postId, $author, $comment, $commentId){

      $db = $this->dbConnect();
      $comment = $db->prepare("UPDATE comments SET author = ?, comment = ?, comment_date = NOW() WHERE id = ? AND post_id = ?");

      $affectedComment = $comment->execute(array($author, $comment, $commentId, $postId));

      return $affectedComment;


    }


}

et ma vue commentView.php

<?php $title = htmlspecialchars($post['title']); ?>

<?php ob_start(); ?>
<h1>Mon super blog !</h1>
<p><a href="index.php?action=post&id=<?= $post['id']?>">Retour au précédent billet</a></p>

<div class="news">
    <h3>
        <?= htmlspecialchars($post['title']) ?>
        <em>le <?= $post['creation_date_fr'] ?></em>
    </h3>

    <p>
        <?= nl2br(htmlspecialchars($post['content'])) ?>
    </p>
</div>

<h2>Modifier le commentaire</h2>

<form action="index.php?action=updateComment&amp;id=<?= $post["id"]?>&comment_id=<?= $comments['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>

<?php $content = ob_get_clean(); ?>

<?php require('template.php'); ?>
+0 -0

"Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp64\www\mvc\model\CommentManager.php on line 42"

Le plus souvent tu as une variable qui n’a rien à faire là, ici tu convertis une classe PDO en string. C’est ta variable $comment n’a rien à faire là. :/

+0 -0

Mais non! Pas ma réponse! Je ne l’ai pas donné justement ou pas totalement. :lol:

Comme l’indique ton premier message

J’aimerais si vous le pouvez, m’orienter et ne pas me donner de réponse svp.

Normalement tu peux mettre une majuscule pour les class ;)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte