Bonjour,
Dans la page commentaires.php,j'ai un formulaire qui une qu'on clique sur "envoyer" il dirige sur la page commentaires_post.php qui le redirige sur la page commentaires.php en affichant le mot en question envoyer dans le formulaire.
Alors voilà le scrip "commentaires.php":

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
     <meta charset="utf-8" />
     <link rel="stylesheet" href="style.css" />
     <title>blog</title>
    </head>

    <body>

  <h1>Mon blog !</h1>     
  <p><a href="index.php">Retour à la liste des billets</a></p> 

  <?php
   // on se connecte à la bdd
  try{
    $bdd = new PDO('mysql:host=localhost;dbname=give','root',''); 
  }
  catch(Exception $e){
    die('error :'.$e->getMessage());
  }
  // la requête préparée pour billets
  $Bien = $bdd->prepare('SELECT id,titre,contenu,DATE_FORMAT(date_creation,\'%d/%m/%Y à %Hh%imin%ss\') AS date_creation FROM billets WHERE id = ?');
  $Bien->execute(array($_GET'billets'])) or die(print_r($bdd->errorInfo()));
  $Bon = $Bien->fetch();
  {
  ?>
  <section>
  <h3><?php echo htmlspecialchars($Bon'titre']);?>
    <em><?php echo $Bon'date_creation'];?></em>
  </h3>
  <p><?php echo htmlspecialchars($Bon'contenu']);?></p>
</section>
<section>
<h2>Commentaires</h2>

  <?php
  // la requête préparée commentaires
  }
  $Bien->closeCursor(); // stop la requête billets avent....
  $Ben = $bdd->prepare('SELECT auteur,commentaire,DATE_FORMAT(date_commentaire,\'%d/%m/%Y à %Hh%imin%ss\') AS date_commentaire FROM commentaires WHERE id_billet = ? ORDER BY date_commentaire');
  $Ben->execute(array($_GET'billets'])) ;
  //la boucle pour afficher tous les commentaires....
  while($Bon = $Ben->fetch())
  {
  ?>
  <p><strong><?php echo htmlspecialchars($Bon'auteur']);?></strong> 
    le <em><?php echo $Bon'date_commentaire'];?></em> </p> 
  <p> <?php echo htmlspecialchars($Bon'commentaire']);?> </p>

<?php
}
$Ben->closeCursor(); // stopper la requête commentaire....
?>
<br/>
<fieldset>
<legend>Message</legend>
<form action="commentaires_post.php" method="post">
<label for="auteur">auteur</label>:<input type="text" name="auteur" id="auteur"/> <br/> <br/>
<textarea name="message">
ton commentaire ici...
</textarea> <br/>
<input type="submit" value="Envoyer"/>
</form>
</fieldset> 
</section>
</body>
</html>

Et maintenant le scrip de la page "commentaires_post.php":

<?php
// on se connecte à la bdd
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=give','root','');
}
catch(Exception $e)
{
    die('error :'.$e->getMessage());
}
// la requête préparée
$req = $bdd->prepare('INSERT INTO commentaires(auteur,commentaire,date_commentaire) VALUES(?, ?, ?)');
$req->execute(array('auteur'=>$_POST'auteur'],'commentaire'=>$_POST'message'],'date_commentaire'=>$_POST'date_commentaire'])) ;
// on redirige vers la page commentaire
header('location:commentaires.php');
$req->closeCursor();// on stop la requête
?>

Mais une erreur se présente.Ce qui est la cause de ce post alors,vos aides me serra bénéfique!L'erreur:
( ! ) SCREAM: Error suppression ignored for
( ! ) Notice: Undefined index: billets in C:\wamp\www\nouvo\commentaires.php on line 26

( ! ) SCREAM: Error suppression ignored for
( ! ) Notice: Undefined index: billets in C:\wamp\www\nouvo\commentaires.php on line 50

10 réponses


Ton script de récupération d'un billet dans commentaire.php attends une variable GET qui correspond a l'ID du billet que tu veux commenter, elle est manifestement absente.

Du coup ton problème est en amont, lorsque tu cliques sur le lien (a priori spécifique du poste a commenter) qui doit afficher la page commentaire.php. Assure-toi qu'il s'agit d'une url du genre

www.blabla.com?billets=1
               ^---- Ta variable a passer en get commence ici
muss
Auteur

Justement je sais que ça vient de là!Entre ligne 26 et 50 mais c'est un flou pour moi.Je veux savoir par contre une chose:est ce que que ma "method" dans le formulaire doit être la "method get"?
Vu que le paramètre dans l'URL est:

<p><a href="commentaires.php?billets=<?php echo $donnees'id'];?>">commentaires</a></p>
  • Quelle est la page qui te redirige vers commentaires.php?
  • Est-ce un lien ou un formulaire qui t'y amène ?
    Il est la ton problème, pas dans la page commentaires.php

commentaires.php envoie le formulaire vers commentaires_post.php avec la méthode POST, et tu récupères tes variables $_POST, donc la tout va bien (enfin il manque la date dans ton formulaire)

muss
Auteur

La page qui dirige vers commentaires.php la voilà:

<?php
// on se connecte à la bdd
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=give','root','');
}
catch(Exception $e)
{
    die('error :'.$e->getMessage());
}
// la requête préparée
$req = $bdd->prepare('INSERT INTO commentaires(auteur,commentaire,date_commentaire) VALUES(?, ?, ?)');
$req->execute(array($_POST'auteur'],$_POST'message'],$_POST'date_commentaire'])) ;
// on redirige vers la page commentaire
header('location:commentaires.php');
$req->closeCursor();// on stop la requête
?>

La page qui à le formulaire:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
     <meta charset="utf-8" />
     <link rel="stylesheet" href="style.css" />
     <title>blog</title>
    </head>

    <body>

  <h1>Mon blog !</h1>     
  <p><a href="index.php">Retour à la liste des billets</a></p> 

  <?php
   // on se connecte à la bdd
  try{
    $bdd = new PDO('mysql:host=localhost;dbname=give','root',''); 
  }
  catch(Exception $e){
    die('error :'.$e->getMessage());
  }
  // la requête préparée pour billets
  $Bien = $bdd->prepare('SELECT id,titre,contenu,DATE_FORMAT(date_creation,\'%d/%m/%Y à %Hh%imin%ss\') AS date_creation FROM billets WHERE id = ?');
  $Bien->execute(array($_GET'billets'])) or die(print_r($bdd->errorInfo()));
  $Bon = $Bien->fetch();
  {
  ?>
  <section>
  <h3><?php echo htmlspecialchars($Bon'titre']);?>
    <em><?php echo $Bon'date_creation'];?></em>
  </h3>
  <p><?php echo htmlspecialchars($Bon'contenu']);?></p>
</section>
<section>
<h2>Commentaires</h2>

  <?php
  // la requête préparée commentaires
  }
  $Bien->closeCursor(); // stop la requête billets avent....
  $Ben = $bdd->prepare('SELECT auteur,commentaire,DATE_FORMAT(date_commentaire,\'%d/%m/%Y à %Hh%imin%ss\') AS date_commentaire FROM commentaires WHERE id_billet = ? ORDER BY date_commentaire');
  $Ben->execute(array($_GET'billets'])) ;
  //la boucle pour afficher tous les commentaires....
  while($Bon = $Ben->fetch())
  {
  ?>
  <p><strong><?php echo htmlspecialchars($Bon'auteur']);?></strong> 
    le <em><?php echo $Bon'date_commentaire'];?></em> </p> 
  <p> <?php echo htmlspecialchars($Bon'commentaire']);?> </p>

<?php
}
$Ben->closeCursor(); // stopper la requête commentaire....
?>
<br/>
<fieldset>
<legend>Message</legend>
<form action="commentaires_post.php" method="post">
<label for="auteur">auteur</label>:<input type="text" name="auteur" id="auteur"/> <br/> <br/>
<textarea name="message">
ton commentaire ici...
</textarea> <br/>
<input type="submit" value="Envoyer"/>
</form>
</fieldset> 
</section>
</body>
</html>

J'essaye mais j'arrive toujours pas à régler le problème.

muss
Auteur

Après combien d'année pour une réponse? Je ne sais pas pourquoi les sites créent des forums si c'est pour répondre des années après??? Pour nous qui voulons apprendre ,et qui ne sommes pas dans des écoles comme vous,s'il faut répondre après des années alors ça sera à quand la fin de notre apprentissage?

Absolument.
Sur ce forum c'est un DEVOIR que nous avons de répondre IMMEDIATEMENT aux messages de tout le monde.
Il est tout a fait INCONCEVABLE que muss doivent ATTENDRE, et que nous ne soyons pas a SON SERVICE. Comment osons-nous ne pas prendre plus de temps sur notre vie irl pour résoudre SEANCE TENANTE le problème de muss. LACHEZ-TOUT ! il faut aider muss !

En ce qui me concerne je trouve ton message est parfaitement inacceptable, du jamais vu sur un forum d'entre-aide. Si tu as ce genre d'exigence, alors va dans une école que tu payeras.

Et pour info il y en a sur ce forum qui ne sont pas allés dans une école, et qui pour apprendre n'ont jamais eu le culot de poster ce genre de message.

Après combien d'année pour une réponse?

Je te ferais tout simplement remarquer que tu es sur un forum communautaire, ce n'est pas un support pour un service pour lequel tu aurais payé quelque chose afin d'avoir un quelconque service après-vente.
Par conséquent, l'aide qui est apportée ici-même, n'est nullement obligatoire, alors au lieu d'être autant offusqué lorsque tu n'a pas de réponse toute les 24 heures, tu devrais plutôt être reconnaissant envers l'aide qui t'es apportée.
De plus, les personnes qui apportent leur aide aux autres, ne sont pas là pour apprendre quoi que ce soit aux autres, mais pour leur venir en aide sur leurs temps libre.
Nous ne sommes ni des professeurs, ni des formateurs pour la plupart d'entre nous, sachant que certains n'ont pas fait d'études dans l'informatique, dans la programmation ou autre dans le domaine.
Pour ta gouverne, pas besoin de faire d'étude pour apprendre le respect envers les autres, alors évites tes remarques déplacés, que je sache tu n'as pas eu à payer quoi que ce soit pour t'inscrire ici afin de demander de l'aide et personne ici ne reçoit la moindre compensation financière ou autre pour répondre aux demandes d'aides.

Sinon, pour répondre à ton problème, c'est plutôt simple, vu que ta requête de récupération des commentaire nécessite un paramètre via l'URL, lorsque tu à la redirection depuis ta page qui traite l'insertion du commentaire posté par le formulaire, tu ne dois pas juste faire une redirection sur commentaires.php , il te faut indiquer le paramètre requis, par exemple :

header('location:commentaires.php?billets='.$_GET'billets']);

Dans ce cas là penses à ajouter également la variable et sa valeur dans l'URL du formulaire pour les récupérer dans la page de traitement d'insertion de commentaire afin de la renseigner pour la redirection.
Ou alors tu les transmets en post dans ton formulaire et tu les récupères en $_POST.

muss
Auteur

Crois moi si c'était payant un forum,je n'aurai jamais donner mon clic et des millions d'internautes comme moi auraient faire autant! Si un forum sur ce genre de site n'est pas pour partager et apporter de l'aide 23h/24h alors,je crois, que c'est mieux de ne pas faire de forum.Juste un message en MP suffit!Comme ça le mec il vient dans 2 ans visiter sa boite de réception et il te répond ou pas comme nos hotmail,yahoo et encore...même là-bas,on y va tous les jours alors que ce n'est pas un forum.Pffff....forum c'est quoi alors??

Y'a des sacrés cas sur ce forum en ce moment dites moi....

Excuses nous d'avoir une vie IRL muss , mais pour ton information, un service non payant n'a aucune obligation d'apporter de l'aide 24/24h comme tu le dis.
Ensuite, la personne qui a fait ce site et ce forum est Grafikart, que ce soit lui ou nous (simples membres d'une communauté), n'avons aucun devoir de satisfaire les autres membres ou visiteurs, nous le faisons "bénévolement", pour rendre service.
Alors si tu n'es pas content que des personnes qui n'ont aucune obligation envers toi de t'apporter leur aide quand ils le peuvent sans pour autant sacrifier leur vie personnelle, nous ne te mettons pas à la porte, mais nous ne te retiendrons pas pour autant, si tu dois nous "cracher dessus", comme je l'ai dit dans ma réponse précédente, personne sur ce forum n'est payé pour répondre à qui que ce soit, et celà vaut également pour Grafikart, qui est la personne qui nous permet de nous entre-aider et qui nous fournit des support vidéos et écrits (formations, tutoriels).

forum c'est quoi alors??

Je ne te donnerais pas toute la définition et son origine exacte, mais un forum c'est un lieu ou se rassemble plusieurs personnes pour discuter, voilà ce que c'est en gros.
Il n'y a aucune notion qui précise que des personnes doivent répondre ou quoi que ce soit à la minute prés, donc ne nous fais pas passer pour des "méchants" ou des personnes qui ne tiennent pas des engagements qu'ils auraient.
Et bien que j'ai donné une réponse à ton problème, tu ne sembles pas en avoir prit connaissance.
Tu as d'ailleurs mit beaucoup de temps pour te connecter sur le site on dirait.
Tu nous demande de te répondre rapidement mais tu mets toi même beaucoup de temps pour en prendre connaissance ? ...