Soucis de redirection

europe21 Messages postés 65 Statut Membre -  
europe21 Messages postés 65 Statut Membre -
Bonjour a tous ,

j'ai un souci de redirection, sur mon blog j'ai un système de signalement des commentaires. lorsqu'un commentaire est signalé je veux rester sur la meme page. J'ai une redirection type: header('Location: index.php?action=post&id='. $postId);le probleme c'est qu'elle ne me reconnait pas $postId et si je mets $_GET['id'] il m'envoie sur l'id du commentaire mais moi je veux l'id du post. Cela fait 2 jours que je suis dessus et je n'y arrive pas . je suis en mvc orienté objet.

Voici mon manager:
//fonction permettant le signalement
public function boolean($commentId){
        $db = $this->dbConnect();
        $req = $db->prepare('UPDATE comments SET moderate = 1 WHERE id = ?');
         $comment =$req->execute(array($commentId));
       return $comment;
    }
//fonction permettant de recupérer mon post grace a son id
public function getPost($postId)
    {
        $db = $this->dbConnect();
        $req = $db->prepare('SELECT id,user_id,  title,chapter, content, DATE_FORMAT(creationDate, \'%d/%m/%Y-\') AS creation_date_fr FROM posts WHERE id = ?');
        $req->execute(array($postId));
        $post = $req->fetch();
 
        return $post;
    }


le controller:
//permet le signalement et la redirection
public function moderate($commentId)
{
    $commentManager = new \Forteroche\Blog\Model\CommentManager();
    $comment = $commentManager->boolean($commentId);
    header('Location: index.php?action=post&id='. $postId);
 
    }
//permet de recuperer mon post
public function post()
{
    $postManager = new \Forteroche\Blog\Model\PostManager();
    $commentManager = new \Forteroche\Blog\Model\CommentManager();
 
    $post = $postManager->getPost($_GET['id']);
    $comments = $commentManager->getComments($_GET['id']);
    $chapters = $postManager->getPosts();
    $view = new View('postView');
    $view->generer(['post' => $post,'comments' => $comments,'chapters'=>$chapters]);
       
}


mon routeur:
//signalement
elseif ($_GET['action'] == 'moderate'){
             
              if (isset($_GET['id']) && $_GET['id'] > 0) {
              $ctrlfrontend->moderate($_GET['id']);
            
              }              
       }
// permet d’appeler mon post
elseif ($_GET['action'] == 'post') {
        if (isset($_GET['id']) && $_GET['id'] > 0) {
            
           $ctrlfrontend->post($_GET['id']);
        }
         
    }


et ma page:
<?php
 
require_once('controller/session.class.php');
$Session = new \Forteroche\Blog\Session();
 
 
?>
    <?php $this->title = htmlspecialchars($post['title']) ?>
        <?php  include "menu.php"?>
            <!-- Intro Header -->
            <header class="masthead">
                <div class="intro-body">
                    <div class="container">
                        <div class="row">
                            <div class="col-lg-12 mx-auto">
                                <h1 class="brand-heading">Jean Forteroche</h1>
                                <p class="intro-text">Billet simple pour l'Alaska</p>
                            </div>
                        </div>
                    </div>
                </div>
            </header>
            <div class="news">
                <h3>
        <?= htmlspecialchars($post['chapter']) ?> :
            <?= htmlspecialchars($post['title']) ?> <em>le <?= $post['creation_date_fr'] ?></em> </h3>
                <div class='post'>
                    <?= $post['content'] ?>
                        <br/>
                        <br/><a href="index.php">Retour à la liste des chapitres</a></div>
            </div>
            <div class="comment">
                <h3>Commentaires</h3></div>
            <?php
while ($comment = $comments->fetch())
{
?>
                <div class="modif">
                    <p style='margin-bottom:0;'><strong><?= htmlspecialchars($comment['author']) ?></strong> le
                        <?= $comment['comment_date_fr'] ?>
                    </p>
                    <?php if($comment['moderate']== '0') { ?>
                        <form action="index.php?action=moderate&id=
<?= htmlspecialchars($comment['id']) ?>" method="post">
                            <input href="#" class='signal' type="submit" value='signaler' /> </form>
                        <?php } else{ ?>
                            <form action="" method="post">
                                <input class='signal' type="submit" value='commentaire signalé' style='color:red' /> </form>
                            <?php } ?>
                                <p>
                                    <?= nl2br(htmlspecialchars($comment['comment']))?>
                                </p>
                </div>
                <?php
}
?>
                    <div class="comment">
                        <h3>Laissez un commentaire</h3></div>
                    <div class="news">
                        <form action="index.php?action=addComment&id=
<?= $post['id']?>" method="post">
                            <div>
                                <label for="author">Auteur</label>
                                <br />


voici mon github:https://github.com/stephaneurope/blog_forteroche

merci de votre aide

1 réponse

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Commence donc par appliquer ces quelques principes :
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    (surtout la partie où il est question de récupérer "proprement" les variables AVANT de les utilsier

    .
    0
    1. europe21 Messages postés 65 Statut Membre
       
      ok je regarde cela . Merci.
      0
    2. europe21 Messages postés 65 Statut Membre
       
      J'ai regardé mais je ne vois pas trop comment cela règle mon souci.
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Donc tu as reecrit ton code ??
      0
    4. europe21 Messages postés 65 Statut Membre
       
      Je fais que ç'a le réécrire ;).
      Je suis débutant ,pourrais tu etre plus précis et me dire ou je dois modifier le code car mon routeur verifie les $_Get avec un isset que dois je faire de plus? Au niveau de mon controller peut etre?
       public function moderate($commentId)
      {
      if (isset($_GET['id']) && $_GET['id'] > 0) {
          $commentManager = new \Forteroche\Blog\Model\CommentManager();
          $comment = $commentManager->boolean($_GET['id']);
         
           header('Location: index.php?action=post&id='. $postId);}
      
          } 


      merci de ta patience.
      0
    5. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      par exemple...
      if (isset($_GET['id']) && $_GET['id'] > 0) {
      

      devient :
      $id = !empty($_GET['id']) ? $_GET['id']: NULL;
      if( $id>0) {
      

      pareil pour ta variable $action ...


      Ensuite.. je ne comprend pas....
      Ta méthode moderate a en paramètre la variable $commentId .... sauf que tu ne l'utilises pas dans ton code ensuite... pourquoi ?

      Puis dans ta redirection
       header('Location: index.php?action=post&id='. $postId);

      ... tu utilises la variable $postId ... mais... elle est défini où ?? Il faudrait sûrement la passer en paramètre de ta méthode non ? (pour pouvoir l'utiliser dedans..... )


      NB: Pense à mettre un EXIT après chaque redirection ...
      0