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
}
?>
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
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
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']));
Tu veux dire que je dois retirer cette condition sans effacer ce qu'il y a à l'interieur ?
<?php if(isset($_SESSION['id']))
{
....
}
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 à : <b><?= $c = ($_SESSION['pseudo'])?>:</b> <?= $c ['commentaire']; ?><br />
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
Nickel merci !! J'ai retiré tout les $c et en ajoutant $_POST à [commentaire] sur ma page plus aucune erreur !
<b><?= $_SESSION['pseudo']?>:</b> <?= $_POST['commentaire']; ?><br />
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
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
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
Ahhh d'accord :D C'est parfait ça affiche les commentaires sans ecraser les précédents !
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
}
}
bonjour,
il te manque rien entre = et ['pseudo']
et si le gars est connecté, tout les commentaires précédents seront écris par lui ?
du quoi c'est quoi l'intérêt de la conditon si tu affiches forcément les commentaires ?
Biensur que non tout les commentaires ne seront pas écris par lui, c'était pour dire que quand l'utilisateur est connecté il peut laisser des commentaires et s'il ne l'es pas il peut avoir accès au commentaires déjà posté
ba ce n'est pas ce que le code dit. (crée un nouvel utilisateur et regarde)
j'avais écrit un message déjà
concernant le dernier point, il faut juste tester si l'utlisateur est connecté pour afficher la possibilité de commenté
Oui je sais aussi quand je crée un nouvel utilisateur et que je poste un nouveau commentaire cela affiche le nouveau pseudo de partout
L'autre jour tu m'avais dit de mettre $c['pseudo'] et $_SESSION['pseudo'] sauf que cela plante
Si je met $_SESSION['pseudo'] cela marche parfaitement et en rajoutant $c['pseudo'] AND $_SESSION['pseudo'] cela plante
non, il faut juste $c['pseudo'], c'est lui qui contient le pseudo correspondant aux messages qu'on affiche
Ah oui en effet quand on crée un nouveau compte c'est bizzare que cela poste pas des commentaires avec des pseudos différents, cela affiche le même pseudo même sur ceux posté avec d'autres pseudos
hinnnnnnn d'accord bah oui c'est logique fallait remplacer $c par >> $_SESSION de partout, c'est vraiment tout con dès fois xD
Euh oui pardon ^^ Par contre quand j'actualise ma page le commentaire se rajoute à chaque fois
Voilà pourquoi je redigire toujours après avoir insérer un message, ça vide $_POST et évide ce genre de problème
Oui j'ai essayé avec un header('Location: .php'); seulement j'ai une erreur ( ! ) Warning: Cannot modify header information - headers already sent by
la fonction header doit être utiliser avant le < !doctype>, il ne dois pas y avoir de code html avant
D'accord je pensais qu'on pouvait l'insérer dans le html, avant le !doctype j'ai mis header('Location: gateaux.php'); exit; cela m'indique "Cette page ne fonctionne paslocalhost vous a redirigé à de trop nombreuses reprises."
Pour en revenir à l'affichage des commentaires qui s'affichent même si l'on est pas connecté pour l'instant j'ai mis en place ceci >>>
<?php while($_SESSION = $commentaire->fetch()) { ?>
<div class="informations_commentaires">
Posté par <b><?= $_SESSION['pseudo']?> </b> le <?= $_SESSION['date_commentaire'];?>
</div>
<div class="commentaires">
<?= $_SESSION['commentaire'];?><br />
</div>
<?php
} ?>
<?php } else
{
?><p class="phrase_connectezVous">Connectez-vous pour pouvoir laisser votre message !<p>
<?php
$commentaire = $bdd->prepare('SELECT * FROM commentaires ORDER BY id');
$commentaire->execute(); ?>
<div class="informations_commentaires">
Posté par <b><?= ['pseudo']?> </b> le <?= ['date_commentaire'];?>
</div>
<div class="commentaires">
<?= ['commentaire'];?><br />
<?php
}
?>
et je pari que ça ne fonctionne pas....
oula la c'est sur que tu vas avoir de gros problème.....
c'est quoi l'intéret de charger la session avec les commentaires??? car du coup le dernier commentaire écrasera aussi tout ce que tu as mis en session donc le pseudo de l'utilisateur qui consulte le site
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
J'ai pensé à mettre ma boucle : ?php while($_SESSION = $commentaire->fetch()) { ?>...... ailleurs mais cela me crée pleins d'erreur également
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
}
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 :
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 ?
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
}
?>
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> ';
}
}
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 !