Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP MVC en PHP

Ajouter fonctionnalité : modifier les commentaire

    26 mai 2018 à 14:43:41

    Bonjour à tous!

    Je suis sur le TP Modification des commentaires. Après plusieurs jours dessus, je ne vois plus rien et surtout l'erreur que j'ai dû faire pour que mon dev ne soit pas fonctionnel. J'aurai besoin de votre aide, svp! :honte: 

    Alors voilà! Il faut arriver à faire en sorte que n'importe quel visiteur puisse modifier un commentaire et que celui-ci soit mis à jour en BDD.

    Lorsque je clique sur "Modifier", j'arrive bien sur mon formulaire pour pouvoir modifier le commentaire. Par la suite, je valide ma modification et le commentaire n'est pas mis à jour.

    Je n'ai pas erreur qui apparaît et je n'ai pas l'impression qu'il y ait un problème de communication avec la BDD. 

    Ci-dessous mon code (je n'ai pas encore fait la POO) :

    - model/frontend.php

    <?php
    function dbConnect()
    {
        $db = new PDO('mysql:host=localhost;dbname=blog;charset=utf8', 'root', '');
        return $db;
    }
    
    function view($commentId) // connexion aux données pour récupérer un commentaire précis
    {
    	$db = dbConnect();
        $comment = $db->prepare('SELECT id, comment FROM comments WHERE id = ?');
        $comment->execute(array($commentId));
        $viewcomment = $comment->fetch();
    
        return $viewcomment;
    }
    
    function edit($comment, $commentId) // connexion aux données pour modifier un commentaire
    {
    	$db = dbConnect();
    	$newcomment= $db->prepare('UPDATE comments SET comment = ? WHERE id=?');
    	$affectedComment = $newcomment->execute(array($comment, $commentId));
    
    	return $affectedComment;
    }

    - controller/frontend.php

    <?php
    require('model/frontend.php');
    
    function viewComment() // pour voir le commentaire
    {
        $viewcomment = view($_GET['id']);
    
        require('view/frontend/editCommentView.php');
    }
    
    function editComment($postId, $commentId, $comment) // pour éditer le commentaire à modifier
    {
        $affectedComment = edit($commentId, $comment);
    
        if ($affectedComment === false) {
            throw new Exception('Impossible de modifier le commmentaire');
        }
        else {
            header('Location: index.php?action=post&id=' . $_GET['postId']);
        }
    }

    - 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 !');
                    }
                }
                else {
                    throw new Exception('Aucun identifiant de billet envoyé');
                }
            }
            elseif ($_GET['action'] == 'viewComment') {
                if (isset($_GET['id']) && $_GET['id'] > 0) {
                    viewComment();
                }
                else {
                    throw new Exception('Tous les champs ne sont pas remplis !');
                }
            }
                    elseif ($_GET['action'] == 'editComment') {
                if (isset($_GET['id']) && $_GET['id'] > 0 && isset($_GET['postId']) && $_GET['postId'] > 0) {
                    if (!empty($_POST['comment'])) {
                        editComment($_GET['id'], $_GET['postId'], $_POST['comment']);
                    }
                    else {
                        throw new Exception('Tous les champs ne sont pas remplis !'); 
                    }
                }
                else {
                    throw new Exception('Aucun identifiant de billet envoyé');
                }
            }
        }       
        else {
            listPosts();
        }
            
    }
    catch(Exception $e) {
        $errorMessage = $e->getMessage();
        require('view/errorView.php');
    }

    - editCommentView.php

    <?php $title = 'Modification du commentaire'; ?>
    
    <?php ob_start(); ?>
    <h1>Mon super blog !</h1>
    <p><a href="index.php?action=post&amp;id=<?= $_GET['postId'] ?>">Retour au billet</a></p>
    
    <h2>Modification du commentaire</h2>
    
    <p>Ancien commentaire : <?= nl2br(htmlspecialchars($viewcomment['comment'])); ?></p>
    
    	<form action="index.php?action=editComment&amp;id=<?= $_GET['id']?>&amp;postId=<?= $_GET['postId'] ?>" method="post">
    	    <div>
    	        <label for="comment">Commentaire modifié :</label><br />
    	        <textarea id="comment" name="comment" rows="8" cols="45"></textarea>
    	    </div>
    	    <div>
    	        <input type="submit" value="Modifier" />
    	    </div>
    	</form>
    
    <?php $content = ob_get_clean(); ?>
    
    <?php require('template.php'); ?>

    - Et au cas où, le code pour le lien menant vers le formulaire de modification sur postView.php :

    (<a href="index.php?action=viewComment&amp;id=<?= $comment['id']?>&amp;postId=<?= $post['id'] ?>">modifier</a>)

    C'est la 1ère fois que je fais ça. J'espère avoir été assez explicite.

    Merci pour votre aide!!

    -
    Edité par StéphanieSC 26 mai 2018 à 14:43:57

    • Partager sur Facebook
    • Partager sur Twitter
      26 mai 2018 à 20:43:34

      Bonsoir,

      Personnellement je n'ai pas mis index.php sur le lien  menant vers formulaire de modification sur postView.php.

      J'ai mis le nom de mon formulaire de modification qui me mène à ma page de modification et cela fonctionne.

      -
      Edité par Max Imus 26 mai 2018 à 20:49:10

      • Partager sur Facebook
      • Partager sur Twitter

      TP MVC en PHP

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown