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
,

Yes merci pour tout !

Default
,

Il n' a pas de session_start dans ton code.
Il est bien mis qq part ? Sinon, tu repars sur une session vide.
Ensuite, c'est pas bizzare de filtrer sur commentaire = pseudo dans la requête SQL ?

Default
,

Le session_start(); est bien rajouté plus haut seulement j'ai fait copier/coller le code ou doit se trouver l'erreur.
Tu as sans doute raison pour la requête >>> $commentaires->execute(array($_SESSION[pseudo'])); J'avais également remplacé par [id] mais rien ne change

40917
,

Bonjour,
Tu fais un SELECT id mais en dessous tu demandes à afficher le champs "commentaires" or si tu ne le demandes pas dans ta requête, tu ne peux pas l'avoir, là tu as seulement l'id

Default
,

Salut,
Bah écoute j'ai beau bidouiller ce jolie code, c'est galère pour savoir qu'est ce qui faut rajouté..

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

si c'est pour afficher tour les commentaires, pas besoin de condition

Default
,

Tu veux dire que je dois retirer cette condition sans effacer ce qu'il y a à l'interieur ?

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

Default
,

Carouge parlait du where dans ta requête je pense : pourquoi filtrer ?

$commentaires = $bdd->prepare('SELECT * FROM commentaires ORDER BY id DESC');
$commentaires->execute();
Default
,

Ah d'accord oui en effet je comprend mieux !
Super cela s'affiche maintenant sur ma page mais avec une erreur qui m'indique ! "Warning: Illegal string offset 'commentaire' dans ma ligne 123 qui correspond à : <?= $c = ($_SESSION['pseudo'])?>: <?= $c ['commentaire']; ?>

40917
,

tu écrases ta varaibles $c avec le pseudo donc $c ne contient plus le contenu de ta table commentaires
enlèves $c = avant $_SESSION et les paranthèses autour de ce dernier

Default
,

et ce ne serait pas

$c['pseudo']

plutôt que la valeur de $_SESSION ? sinon, tous les commentaires seront associés au pseudo en cours

Default
,

Nickel merci !! J'ai retiré tout les $c et en ajoutant $_POST à [commentaire] sur ma page plus aucune erreur !

<?= $_SESSION['pseudo']?>: <?= $_POST['commentaire']; ?>

Par contre un dernier soucis si je veux poster 1 commentaire différent à chaque fois cela remplace le dernier posté par la même phrases à chaque fois sur les anciens coms

Default
,

je crois que qc t'a échappé...

<?php while($c = $commentaires->fetch()) { ?>
                <b><?= $c['pseudo'])?>:</b> <?= $c['commentaire']; ?><br />
            <?php } ?>
Default
,

dans ta boucle while, $c représente une ligne de ta bdd.
si tu reprends les infos du post, tu perds l'intérêté de stocker / récupérer les infos en bdd

Default
,
           D'accord j'ai pris en compte ce que tu m'as dit et j'ai rajouté le closeCursor();  
        Voilà :
            <?php while($c = $commentaire->fetch()) { ?>
                <b><?= $_SESSION['pseudo']?>:</b> <?= $c ['commentaire']; ?><br />
                <?php $commentaire->closeCursor();
             } ?>

Je peux poster un seul commentaire à la fois et a chaque fois cela le remplace

40917
,

bah non pas le closeCursor dans la boucle
et il faut afficher $c['pseudo'] et $_SESSION['pseudo']
et enlève ce htmlspecialchar qui devrait être dans la boucle sur $c['commentaire']. Il sert UNIQUEMENT à l'affichage

Default
,

Ahhh d'accord :D C'est parfait ça affiche les commentaires sans ecraser les précédents !

Default
,

Merci beaucoup de ton aide vraiment ça fait plaisir ! Surtout pour un débutant :)

40917
,

avec plaisir

Default
,

Bonjour, J'essaie de faire en sorte d'afficher les commentaires avec un "else" pour que la personne qui n'est pas connecté sur la page puisse voir quand même les commentaires s'afficher, seulement cela ne marche pas, j'ai quelques erreurs dans mon code et je comprend pas pourquoi.. merci si quelqu'un a quelques indices ;)

       <?php while($c = $commentaire->fetch()) { ?>
                <div class="informations_commentaires">
                    Posté par <b><?= $_SESSION['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 while($c = $commentaire->fetch()) { ?>
                <div class="informations_commentaires">
                    Posté par <b><?= ['pseudo']?> </b> le <?= $c['date_commentaire'];?>
                </div>
               <div class="commentaires">
                   <?= $c['commentaire'];?><br />
               </div><?php
            }
        }
1 3