Soucis de redirection

Fermé
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024 - 13 mars 2018 à 14:24
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024 - 14 mars 2018 à 14:48
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

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
13 mars 2018 à 17:17
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
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024
13 mars 2018 à 21:03
ok je regarde cela . Merci.
0
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024
14 mars 2018 à 13:28
J'ai regardé mais je ne vois pas trop comment cela règle mon souci.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 mars 2018 à 13:47
Donc tu as reecrit ton code ??
0
europe21 Messages postés 63 Date d'inscription mardi 26 décembre 2017 Statut Membre Dernière intervention 4 février 2024
Modifié le 14 mars 2018 à 14:14
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 mars 2018 à 14:43
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