Problème d'ajout de commentaires PHP/mysql

Ce sujet est résolu
Default
,

Bonjour,

Je rencontre un petit problème avec mon code car lorsque je poste un commentaire sur ma page celui-ci s'ajoute parfaitement dans ma base de données, seulement il ne s'affiche pas directement sur ma page. Est-ce que quelqu'un aurait une solution ? merci d'avance

        <?php if(isset($_SESSION['id']))
        {

            if(isset($_POST['submit_commentaire'])) {
                if(isset($_SESSION['pseudo'], $_POST['commentaire']) AND !empty($_POST['commentaire']
                )) {
                $pseudo = ($_SESSION['pseudo']);
                $commentaire = htmlspecialchars($_POST['commentaire']);

                $inserer = $bdd->prepare('INSERT INTO commentaires (pseudo, commentaire) VALUES (?,?)');
                $inserer->execute(array($pseudo,$commentaire));
                $erreur = "<span style='color: green'> Votre commentaire a bien été posté !</span>";

                } else {
                $erreur = "Tous les champs doivent être complétés !";
            }
        }

        $commentaires = $bdd->prepare('SELECT id FROM commentaires WHERE commentaire = ? ORDER BY id DESC');
        $commentaires->execute(array($_SESSION['pseudo']));

        ?>

            <form method= "POST">
            <div id="pseudo"><?php echo '<b>Pseudo : </b>' . $_SESSION['pseudo'] ?></div><br />
                <textarea name="commentaire" id="commentaire" placeholder=" Taper votre commentaire..."cols="50"rows="5"></textarea><br />
                <input type="submit" id="poster" value="Poster" name="submit_commentaire" /><br />
            </form>

            <?php
            if (isset($erreur))
            {
                ?><div id="erreur"><?php echo '<font color="red";>' . $erreur . "</font>";?></div><?php
            }?>
            <br />
            <?php while($c = $commentaires->fetch()) { ?>
                <b><?= $c = ($_SESSION['pseudo'])?>:</b> <?= $c['commentaire']; ?><br />
            <?php } ?>
        <?php } else 
        {
            ?><p class="phrase_connectezVous">Connectez-vous pour pouvoir laisser votre message !<p><?php
        }
            ?>

51 Réponse

1 3
Default
,

Comment ta deviné que ça marchait pas XD lol
Ben je teste le code après je pensais bien faire en faisant $commentaire = $bdd->prepare('SELECT * FROM commentaires ORDER BY id');
$commentaire->execute(); ?>

Pour que cela récupère les commentaires et j'ai un message ( ! ) Notice: Array to string conversion

Default
,

J'ai pensé à mettre ma boucle : ?php while($_SESSION = $commentaire->fetch()) { ?>...... ailleurs mais cela me crée pleins d'erreur également

40917
,

pas ailleurs mas remplacer $_session par $c .... comme c'était avant

Default
,

Dans cette configuration là ?

       <?php while($c = $commentaire->fetch()) { ?>
                <div class="informations_commentaires">
                    Posté par <b><?= $c['pseudo'];?> </b> le <?= $c['date_commentaire'];?>
                </div>
               <div class="commentaires">
                   <?= $c['commentaire'];?><br />
               </div>

                <?php   
             } ?>
        <?php } else 
        {
            ?><p class="phrase_connectezVous">Connectez-vous pour pouvoir laisser votre message !<p>
                <div class="informations_commentaires">

                    Posté par <b><?= $c['pseudo'];?> </b> le <?= $c['date_commentaire'];?>
                </div>
               <div class="commentaires">
                   <?= $c['commentaire'];?><br />
               </div>
            <?php
        }
40917
,

c'est déjà mieux.
Dans le else, tu ne devrais pas avoir de commentaire à afficher
Tu devrais avoir une structure de cette façon :

  • Affichage des commentaires
  • Si utilisateur connecté -- Affichage du formulaire pour poster un commentaire
  • Sinon -- Afichage du message pour que l'utilisateur se connecte
Default
,

Oui en effet c'est le schéma a respecté seulement quand je place l'affichage des commentaires ailleurs j'ai des erreurs alors ou faudrait-il le placer ?

40917
,

montre moi la partie complète de l'affichage des commentaires, c'est à dire avec le if

Default
,

Voilà la structure de mon code :

      <?php if(isset($_SESSION['id']))
        {

            if(isset($_POST['submit_commentaire'])) {
                if(isset($_SESSION['pseudo'], $_POST['commentaire']) AND !empty($_POST['commentaire']
                )) {
                $pseudo = ($_SESSION['pseudo']);
                $commentaire = htmlspecialchars($_POST['commentaire']);

                $inserer = $bdd->prepare('INSERT INTO commentaires (pseudo, commentaire) VALUES (?,?)');
                $inserer->execute(array($pseudo,$commentaire));
                $envoie = "Votre commentaire a bien été posté !";

                } else {
                $erreur = "Tous les champs doivent être complétés !";
            }
        }

        $commentairesParPage = 5;
        $commentaireTotalsReq = $bdd->query("SELECT id FROM commentaires");
        $commentaireTotals = $commentaireTotalsReq->rowCount();
        $pageCourante = $_GET['page'];
        $pageTotales = ceil($commentaireTotals/$commentairesParPage);

        if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $pageTotales)
        {
            $_GET['page'] = intval($_GET['page']);
        } else {
            $pageCourante = 1;
        }


        $depart = ($pageCourante-1)*$commentairesParPage;

        $commentaire = $bdd->prepare('SELECT * FROM commentaires ORDER BY id DESC LIMIT '.$depart.','.$commentairesParPage);
        $commentaire->execute();
        ?>

            <form method= "POST">
            <div id="pseudo"><?php echo '<b>Pseudo : </b>' . $_SESSION['pseudo'] ?></div><br />
                <textarea name="commentaire" id="commentaire" placeholder=" Taper votre commentaire..."cols="50"rows="5"></textarea><br />
                <input type="submit" id="poster" value="Poster" name="submit_commentaire" /><br />
            </form>

            <?php
            if (isset($envoie))
            {
                ?><div id="envoie"><?php echo '<font color="green";>' . $envoie . "</font>";?></div><?php
            }
            if (isset($erreur))
            {
                ?><div id="erreur"><?php echo '<font color="red";>' . $erreur . "</font>";?></div><?php
            }

            for($i=1;$i<=$commentaireTotals; $i++) {
                if($i == $pageCourante)
                {
                    echo $i. ' '; 
                } else {
                    echo'<a href="gateaux.php?page=' .$i. '">'.$i.'</a> ';  
                }
            }

            ?>
            <br />
            <?php while($c = $commentaire->fetch()) { ?>
                <div class="informations_commentaires">
                    Posté par <b><?= $c['pseudo'];?> </b> le <?= $c['date_commentaire'];?>
                </div>
               <div class="commentaires">
                   <?= $c['commentaire'];?><br />
               </div>

                <?php   
             } ?>
        <?php } else 
        {
            ?><p class="phrase_connectezVous">Connectez-vous pour pouvoir laisser votre message !<p>
            <?php
        }
            ?>
40917
,

Plus qu'à tester et comparer à ton code pour étudier

 <?php 
 if(isset($_SESSION['id'])) {

    if(isset($_POST['submit_commentaire'])) {
        if(!empty($_SESSION['pseudo']) AND !empty($_POST['commentaire'])) {
            $pseudo = $_SESSION['pseudo'];
            $commentaire = $_POST['commentaire'];

            $inserer = $bdd->prepare('INSERT INTO commentaires (pseudo, commentaire) VALUES (?, ?)');
            if($inserer->execute(array($pseudo, $commentaire)))
                $envoie = "Votre commentaire a bien été posté !";
            else
                $erreur = "Commentaire non posté !";

        } else {
            $erreur = "Tous les champs doivent être complétés !";
        }

        if (isset($envoie))
        {
            echo '<div id="envoie"><font color="green">' . $envoie . "</font></div>";
        }
        if (isset($erreur))
        {
            echo '<div id="erreur"><font color="red">' . $erreur . "</font></div>";
        }
    }
 }

$commentairesParPage = 5;
$commentaireTotalsReq = $bdd->query("SELECT id FROM commentaires");
$commentaireTotals = $commentaireTotalsReq->rowCount();
$pageTotales = ceil($commentaireTotals/$commentairesParPage);

if( !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $pageTotales)
{
    // $_GET['page'] = intval($_GET['page']);
    $pageCourante = intval($_GET['page']);
} else {
    $pageCourante = 1;
}


$depart = ($pageCourante-1)*$commentairesParPage;

$commentaire = $bdd->prepare('SELECT * FROM commentaires ORDER BY id DESC LIMIT '.$depart.','.$commentairesParPage);
$commentaire->execute();

while($c = $commentaire->fetch()) { 
    ?>
    <div class="informations_commentaires">
        Posté par <b><?= $c['pseudo'];?> </b> le <?= $c['date_commentaire'];?>
    </div>
    <div class="commentaires">
       <?= htmlspecialchars($c['commentaire']);?><br />
    </div>

    <?php   
 }
// Afficage du formulaire que si connecté
if(!empty($_SESSION['id'])){
    ?>
    <form method= "POST">
        <div id="pseudo"><?php echo '<b>Pseudo : </b>' . $_SESSION['pseudo'] ?></div>
        <textarea name="commentaire" id="commentaire" placeholder=" Taper votre commentaire..." cols="50" rows="5"></textarea>
        <input type="submit" id="poster" value="Poster" name="submit_commentaire" />
    </form>

     <?php
} else {
    ?><p class="phrase_connectezVous">Connectez-vous pour pouvoir laisser votre message !<p>
    <?php
}

// Pagination
for($i=1;$i<=$commentaireTotals; $i++) {
    if($i == $pageCourante)
    {
        echo $i. ' '; 
    } else {
        echo'<a href="gateaux.php?page=' .$i. '">'.$i.'</a> ';  
    }
}
Default
,

C'est bien ce qu'il me semblait j'avais essayé de placer le code plus ou moins comme tu l'as fait, seulement j'avais des erreurs qui étaient sûrement liées à des parenthèses mal placés ou autres, merci cela m'a permis de comprendre d'ou venait mes erreurs !

40917
,

avec plaisir, passe ton sujet en résolu

1 3