IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Modification de commentaire - PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Inde

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut Modification de commentaire - PHP
    Bonjour,

    Je suis débutante. Je travaille sur l'architecture MVC en PHP. J'ai créé une fonctionnalité qui vise à modifier un commentaire. Mais, je ne comprends pas pourquoi, autant la fonctionnalité "Ajouter un commentaire" fonctionne, autant ma fonctionnalité "Modifier le commentaire" ne donne pas les résultats escomptés. Je pense qu'il y a un souci avec le lien de la fonction modifyComment dans mon fichier frontend.php mais je ne comprends pas vraiment quel est le problème.
    Lorsque j'ai terminé de rentrer les informations pour modifier un commentaire et que je le soumets, je reçois le message suivant : "Erreur : Aucune ID envoyée" pourtant je cherche à transmettre l'id dans le lien... C'est pourquoi, je pense que mon lien pose problème mais je ne vois pas ce qui cloche. A ce stade, je pense que le lien n'étant pas correct, cela bloque pour revenir sur la bonne page et enregistrer les données en base à moins qu'il n'y ait encore d'autres soucis... Je joins l'ensemble du code à toutes fins utiles. En db, pour la table "comments", j'ai les champs, id, postId, author, comment et comment_date. Pour la table "posts", j'ai les champs : author, content, creation_date, id et title.

    Je remercie beaucoup par avance ceux qui voudront bien regarder mon (long, désolée) code. Je planche depuis de nombreux jours sur ce code et je ne vois vraiment plus comment le faire fonctionner.

    index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
    if(!empty($_GET['id']))
    {
        setcookie("cookie_id", $_GET['id'], time()+24*3600*365, null, null, false, true);
        session_start();
    }
     
     
    require('controller/frontend.php');
     
     
     
    try {
        if(isset($_GET['action'])) 
        {
     
            // CAS 1 - liste des billets
            if ($_GET['action'] == 'listPosts') {
                listPosts();
            }
     
     
            // CAS 2 - affichage d'un billet
            elseif ($_GET['action'] == 'post') 
            {
                if (isset($_GET['id']) && $_GET['id'] > 0) {
                    post();
                }
                else 
                {
                    throw new Exception('Aucun identifiant de billet envoyé');
                }
            }
     
     
            // CAS 3 - ajouter un commentaire
            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é');
                }
            }
     
     
            // CAS 4 - Modifier un commentaire
            elseif($_GET['action'] == 'modifyComment') 
                // $ post partout au lieu de $ get pour l'id car récupé dans formulaire
                            {
                                if(!empty($_POST['id']) && !empty($_POST['author']) && !empty($_POST['comment'])) 
                                {
                                    $id = $_POST['id'];
                                    $_COOKIE['cookie_id'] = $id;
                                    modifyComment($_POST['id'], $_POST['author'], $_POST['comment']);
                                }
                                else if(empty($_POST['id'])) 
                                {
                                    throw new Exception('Aucune ID envoyée');
                                }
     
                                else 
                                {
                                    throw new Exception('Tous les champs ne sont pas remplis');
                                }
     
                            }        
        }   
        else 
        {
            listPosts();
        }
    }
    catch(Exception $e) 
    {
        echo 'Erreur : ' . $e->getMessage();
    }
    frontend.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php
    // Chargement des classes
    require_once('model/PostManager.php');
    require_once('model/CommentManager.php');
     
    function listPosts()
    {
        $postManager = new \Laure\MVC\Model\PostManager();
        $posts = $postManager->getPosts();
     
        require('view/frontend/listPostsView.php');
    }
     
    function post()
    {
        $postManager = new \Laure\MVC\Model\PostManager();
        $commentManager = new \Laure\MVC\Model\CommentManager();
     
        $post = $postManager->getPost($_GET['id']);
        $comments = $commentManager->getComments($_GET['id']);
     
        require('view/frontend/postView.php'); 
    }
     
    function addComment($postId, $author, $comment)
    {
        $commentManager = new \Laure\MVC\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 modifyComment($postId, $id, $author, $comment)
    {
        $commentManager = new \Laure\MVC\Model\CommentManager();
     
        $affectedComment = $commentManager->editComment($postId, $id, $author, $comment);
     
        if($affectedComment === false) 
        {
            throw new Exception('Erreur lors du remplacement du commentaire !');
        }
        else 
        {
            // lien qui semble poser problème, l'id ne suis pas sur la page UpdateComment après soumission du formulaire, toujours rien en bdd et dans la liste des comments 
          header('Location:index.php?action=post&id=' . $id.'&postId='.postId);
        }
    }
    updateComment.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
    session_start();
    ?>
     
    <?php require('../../model/CommentManager.php'); ?>
     
    <?php $title = 'Modification de commentaire'; ?>
     
    <?php ob_start(); ?>
    <h1>Mon super blog !</h1>
    <p><a href="/architecture_en_mvc/index.php">Retour à la liste des billets</a></p>
     
    <h2>Modification du commentaire</h2>
    <!-- modif 2 apportée mercredi soir 22 05 19 : post_id au lieu d'id pour le lien ci-dessous : -->
    <form action="/architecture_en_mvc/index.php?action=modifyComment&amp;id=<?php echo $_GET['id'];?>" method="post">
     
        <!--<div> -->
            <!-- modif 1 apportée mercredi soir 22 05 19 : ajout de la demande de l'id du post dans le formulaire : champs à mettre en hidden peut être plus tard  -->
          <!--  <label for="post_id">Identifiant du billet</label> <br/>
             <input type="text" id="post_id" name="post_id" />
        </div> -->
     
        <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" value="Envoyer" name="submit"/>
        </div>
    </form>
     
     
     
    <?php $content = ob_get_clean(); ?>
     
    <?php require('template.php'); ?>
    CommentManager.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    namespace Laure\MVC\Model;
    //attention : conséquences potentielles : j'ai enlevé la majuscule erronée au début de manager.Php
    require_once("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 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 editComment($author, $comment, $postId, $id)
        {
            $db = $this->dbConnect();
            $modif_comment = $db -> prepare('UPDATE comments SET author = :author, comment = :comment, postId = :postId WHERE id = :id');
            $affectedComment = $modif_comment->execute(['author' => $author, 'comment' => $comment, 'postId' => $postId, 'id' => $id]);
            return $affectedComment;
     
        }
    }
    postView.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php $title = htmlspecialchars($post['title']); ?>
     
    <?php ob_start(); ?>
    <h1>Mon super blog !</h1>
    <p><a href="index.php">Retour à la liste des billets</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>Commentaires</h2>
     
    <form action="index.php?action=addComment&amp;id=<?= $post['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>
     
     <!--  Ajout d'un input de type hidden avec comme name : id et tu lui définies comme valeur l'id du commentaire. -->
            <input type="hidden" name="id" value="<?php echo $_COOKIE['cookie_id'] ;?>"/>
     
     
    <?php
    while ($comment = $comments->fetch())
    {
    ?>
    <p><strong><?= htmlspecialchars($comment['author']) ?></strong> le <?= $comment['comment_date_fr'] ?> <a href="view/frontend/updateComment.php?id=<?php echo $post['id']; ?>" >(modifier) </a> </p>
        <p><?= nl2br(htmlspecialchars($comment['comment'])) ?></p>
    <?php
    }
    ?>
    <?php $content = ob_get_clean(); ?>
     
    <?php require('view/frontend/template.php'); ?>

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,
    Cela fais beaucoup de code.
    Mais je remarque que vous mélanger allégrement les et êtes vous bien sur d'utiliser en parallèle ces deux méthodes ?

    Ensuite, vous semblez avoir trouvé le souci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
            // lien qui semble poser problème, l'id ne suis pas sur la page UpdateComment après soumission du formulaire, toujours rien en bdd et dans la liste des comments 
          header('Location:index.php?action=post&id=' . $id.'&postId='.postId);
    Pourquoi ne pas vérifier par vous même en stoppant le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
            // lien qui semble poser problème, l'id ne suis pas sur la page UpdateComment après soumission du formulaire, toujours rien en bdd et dans la liste des comments 
          //header('Location:index.php?action=post&id=' . $id.'&postId='.postId);
    var_dump('index.php?action=post&id=' . $id.'&postId='.postId)
    die()

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Inde

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Bonjour MaitrePylos,
    Je viens de rajouter le var_dump et le die() et j'obtiens exactement le même message d'erreur, rien en plus malheureusement.
    Concernant les get et post, j'ai effectivement fait une modification hier soir qui ne fonctionnait pas et j'ai oublié de repasser les POST en GET. Merci de me les avoir signalé. Ceci dit, j'ai corrigé et j'ai un nouveau problème au niveau des arguments de modifyComment. Je me repenche dessus.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    si vous avez mis le die() et que vous avez la même erreur, alors c'est que vous n'êtes pas à cet endroit, car le die() arrête le script et de facto, vous devriez simplement voir un string

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Inde

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    si vous avez mis le die() et que vous avez la même erreur, alors c'est que vous n'êtes pas à cet endroit, car le die() arrête le script et de facto, vous devriez simplement voir un string
    Voulez vous dire que le problème n'est donc pas au niveau du lien ? Je ne suis pas sûre de bien comprendre votre réponse, désolée. Le message d'erreur concerne toujours l'id et j'ai mis le var_dump et le die() juste après le header qui semble poser problème. Merci.

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Vous avez bien commenté le header ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            // lien qui semble poser problème, l'id ne suis pas sur la page UpdateComment après soumission du formulaire, toujours rien en bdd et dans la liste des comments 
          //header('Location:index.php?action=post&id=' . $id.'&postId='.postId);
    var_dump('index.php?action=post&id=' . $id.'&postId='.postId)
    die()

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Inde

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Oui, j'ai le même code que vous, le header est en commentaire et le var_dump et le die() suivent.

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    et donc je vous dit alors, que cela ne viens pas de cette ligne, votre erreur est généré par une autre partie de votre code.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          header('Location:index.php?action=post&id=' . $id.'&postId='.postId);
    Il ne manquerait pas un $ ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          header('Location:index.php?action=post&id=' . $id.'&postId='.$postId);

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    joli

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Inde

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Merci mais je continue à chercher car ça ne fonctionne toujours pas.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- dans index.php, ligne 62 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          modifyComment($_POST['id'], $_POST['author'], $_POST['comment']);
    Or la fonction est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function modifyComment($postId, $id, $author, $comment)
    Il manque un paramètre...

    2- id, $id, $postId,.... tu es sûre de savoir à quoi ça correspond ?

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Inde

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Merci beaucoup pour le commentaire qui a été utile .
    J'ai modifié et passé d'autres corrections et ça fonctionne enfin !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Modification de commentaires [PHP Architecture MVC]
    Par Wildude dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/02/2019, 11h55
  2. [XL-2000] Date de modification sur modif du commentaire d'une cellule
    Par Yapluka dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/06/2009, 15h57
  3. Modification des commentaires
    Par lucazzo dans le forum Excel
    Réponses: 2
    Dernier message: 11/01/2009, 18h20
  4. [MySQL] suppression-modification base via php
    Par mangamanga dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/06/2006, 21h52
  5. [MySQL] FULLTEXT, modif ft_min_word_len avec PHP
    Par Husqvarna dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/10/2005, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo