Création forum

Fermé
kmorel Messages postés 13 Date d'inscription lundi 30 juillet 2018 Statut Membre Dernière intervention 22 octobre 2019 - Modifié le 31 déc. 2018 à 10:17
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 31 déc. 2018 à 15:06
Bonjour cher amis. je suis un programmeur débutant qui essaie de créer un forum pour son site. j'en suis a la page ou on doit insérer une réponse au sujet proposé. j'ai une erreur dans le code que je n'arrive pas à cerner.
Voici le code
<?php session_start();?>

<?php

// on teste si le formulaire a été soumis
if (isset ($_POST['go']) && $_POST['go']=='Poster') {
 // on teste la déclaration de nos variables
 if (!isset($_POST['auteur']) || !isset($_POST['titre']) || !isset($_POST['message'])) {
 $erreur = 'Les variables nécessaires au script ne sont pas définies.';
 }
 else {
 // on teste si les variables ne sont pas vides
 if (empty($_POST['auteur']) || empty($_POST['titre']) || empty($_POST['message'])) {
  $erreur = 'Au moins un des champs est vide.';
 }

 // si tout est bon, on peut commencer l'insertion dans la base
 else {
  // on se connecte à notre base
   error_reporting(E_ALL); ini_set('display_errors', TRUE);ini_set('display_startup_errors', TRUE);
   try{
$bdd =new PDO('mysql:host=localhost;
 dbname=cp1022993_reveil; charset=utf8', 'cp1022993_momo', 'ultimatum2018');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());}

  // on calcule la date actuelle
  $date = date("Y-m-d H:i:s");
if (!isset($_GET['id_sujet_a_lire'])) {
 echo 'Sujet non défini.';}

 else{
  // préparation de la requête d'insertion (pour la table forum_rep)
 $sql = 'INSERT INTO forum_rep (forum_rep_id, forum_rep_auteur, message , date_rep) VALUES(:forum_rep__id, :forum_rep_auteur, :message, :date_rep)';
  $datas= array (':forum_rep__id'=> $_GET['id_sujet_a_lire'] ,
      ':forum_rep_auteur'=> $_POST['auteur'],
      ':message'=> $_POST['message'],
      ':date_rep'=>$date);

  // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
 try{ $req = $bdd->prepare($sql);
  $req->execute($datas);} catch (Exception $e) {echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();}

// on redirige vers la page d'accueil
  header('Location: lire_sujet.php');
  // on termine le script courant
  exit ;?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
  <!--[if lt IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></sxript><! [endif]-->
  <link rel="stylesheet" href=".css"/>
<title>Lecture d'un sujet</title>
</head>

<body>
<?php
 // on prépare notre requête
 $sql = 'SELECT *  FROM forum_sujets WHERE sujet_id=:sujet_id';
 $datas=array(
 ':sujet_id'=>$_GET['id_sujet_a_lire']);
sscanf($datas['date_derniere_reponse'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);
 
 try{
  $req = $bdd->prepare($sql);
  $req->execute($datas);}catch(Exception $e)
  {echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();}
  $resultat = $req->fetch(PDO::FETCH_ASSOC);
 
 $sql = 'SELECT *  FROM forum_rep WHERE forum_rep__id=:forum_rep_id';
 $resultat=array(
 ':forum_rep__id'=>$_GET['id_sujet_a_lire']);
 sscanf($resultat['date_rep'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $moi, $jou, $heur, $min, $sec);
 
echo  '<section class="auteur">
 <span class="auteur">' .htmlspecialchars($datas['sujet_auteur']).'<br>
 <span class)"date">'.$jour.  '-'  .$mois.  '-'  .$annee.  ' '  .$heure.  ':'  .$minute.'<span>';
 '<span class="message">' .htmlspecialchars($datas['sujet_messages']).'<span><section>';
 
 
 while($resultat = $req->fetch());
 echo '<section class="rep">
 <span class="rep">' .htmlspecialchars($resultat['forum_rep_auteur']).'<br>
 <span class)"date">'.$jou.  '-'  .$moi.  '-'  .$an.  ' '  .$heur.  ':'  .$min.'<span>';
 '<span class="message">' .htmlspecialchars($resultat['message']).'<span></section>.';
  
 echo 
 
  '<h2>Insérer une Réponse</h2>
<form action="insert_rep.php" method="post">
<table>
<tr><td>
Auteur :
</td><td>
<input type="text" name="auteur" maxlength="30" size="50" value="<?php echo' .htmlspecialchars($_SESSION['nom']). ' '.htmlspecialchars($_SESSION['prenom']). ';?>">
</td></tr><tr><td>
Message :
</td><td>
<textarea name="message" cols="50" rows="10"><?php if (isset('.$_POST['message'].')) echo' .htmlentities(trim($_POST['message'])).';?></textarea>
</td></tr><tr><td><td align="right">
<input type="submit" name="go" value="Répondre">
</td></tr></table>
</form>';?>

</body>
</html>




Voici l'erreur que cela m'affiche: Parse error: syntax error, unexpected end of file in /home/cp1022993/public_html/forum/lire_sujet.php on line 113.

Merci d'avance pour votre aide.
A voir également:

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
31 déc. 2018 à 12:43
Bonjour,

Plusieurs erreurs....
Une accolade oubliée,
Des instructions php
 <?php....; ?>
alors que tu te trouves déjà dans un bloc de code php...

Sans parler du code php placé au hasard dans ton code...

Essaye ceci (et inspire t'en pour tes prochains codes...)
<?php session_start();
//-------------------------------------------------------------------//
//Affichage des erreurs PHP (se place AU DEBUT du code)
//-------------------------------------------------------------------//
error_reporting(E_ALL); 
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//-------------------------------------------------------------------//
//connexion à la bdd
//-------------------------------------------------------------------//
try{
  $bdd =new PDO('mysql:host=localhost;dbname=cp1022993_reveil; charset=utf8', 'cp1022993_momo', 'ultimatum2018');
  // Activation des erreurs PDO
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());
}


//-------------------------------------------------------------------//
//recuperation PROPRE des variables AVANT de les utiliser
//-------------------------------------------------------------------//
$nom = !empty($_SESSION['nom']) ? $_SESSION['nom'] : "";
$prenom = !empty($_SESSION['prenom']) ? $_SESSION['prenom'] : "";

$auteur = !empty($_POST['auteur']) ? $_POST['auteur'] : NULL;
$titre = !empty($_POST['titre']) ? $_POST['titre'] : NULL;
$message = !empty($_POST['message']) ? $_POST['message'] : NULL;
$go = !empty($_POST['go']) ? $_POST['go'] : NULL;
$id_sujet_a_lire = !empty($_GET['id_sujet_a_lire']) ? $_GET['id_sujet_a_lire'] : NULL;

// on calcule la date actuelle
  $date = date("Y-m-d H:i:s");

//-------------------------------------------------------------------//
// Début du traitement du formulaire
//-------------------------------------------------------------------//
if ($go =='Poster') {
  
  // on teste la déclaration de nos variables
  if (!$auteur || !$titre || !$message) {
    $erreur = 'Au moins un des champs est vide.';
  }
} else {
 
  if (!$id_sujet_a_lire) {
    echo 'Sujet non défini.';
  } else {
  // préparation de la requête d'insertion (pour la table forum_rep)
  $sql = 'INSERT INTO forum_rep (forum_rep_id, forum_rep_auteur, message , date_rep) VALUES(:forum_rep__id, :forum_rep_auteur, :message, :date_rep)';
  $datas= array (':forum_rep__id'=> $id_sujet_a_lire,
      ':forum_rep_auteur'=> $auteur,
      ':message'=> $message,
      ':date_rep'=>$date
      );

  // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
  try{ 
    $req = $bdd->prepare($sql);
    $req->execute($datas);
  } catch (Exception $e) {
    echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();
    exit(); // sinon tu ne verras jamais l'erreur avant la redirection !
  }

  // on redirige vers la page d'accueil
  header('Location: lire_sujet.php');
  // on termine le script courant
  exit();
  
 } 
 
//-------------------------------------------------------------------// 
//récupération des sujets
//-------------------------------------------------------------------//
  $sql = 'SELECT *  
          FROM forum_sujets 
          WHERE sujet_id=:sujet_id';
  $datas = array(':sujet_id'=>$id_sujet_a_lire);
  try{
    $req = $bdd->prepare($sql);
    $req->execute($datas);
    $sujets = $req->fetchAll(PDO::FETCH_ASSOC);
  }catch(Exception $e){
    echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();
  }
  //-------------------------------------------------------------------// 
  //récupération des répponses
  //-------------------------------------------------------------------//
  $sql = 'SELECT *  
          FROM forum_rep 
          WHERE forum_rep__id=:forum_rep_id';
  $resultat=array(':forum_rep__id'=>$id_sujet_a_lire);
  try{
    $req = $bdd->prepare($sql);
    $req->execute($datas);
    $reponses = $req->fetchAll(PDO::FETCH_ASSOC);
  }catch(Exception $e){
    echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();
  }
  
 ?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
  <!--[if lt IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></sxript><! [endif]-->
  <link rel="stylesheet" href=".css"/>
<title>Lecture d'un sujet</title>
</head>

<body>
  <div class="forum-item">
  <?php
   
  sscanf($sujets['date_derniere_reponse'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);
   
  echo  '<section class="auteur">
         <span class="auteur">' .htmlspecialchars($sujet['sujet_auteur']).'<br>
         <span class)"date">'.$jour.  '-'  .$mois.  '-'  .$annee.  ' '  .$heure.  ':'  .$minute.'<span>';
         '<span class="message">' .htmlspecialchars($sujet['sujet_messages']).'<span><section>';
   
   //on boucle sur les réponses au sujet :
   foreach($reponses as $rep){
     sscanf($reponse['date_rep'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $moi, $jou, $heur, $min, $sec);
     echo '<section class="rep">
     <span class="rep">' .htmlspecialchars($rep['forum_rep_auteur']).'<br>
     <span class)"date">'.$jou.  '-'  .$moi.  '-'  .$an.  ' '  .$heur.  ':'  .$min.'<span>';
     '<span class="message">' .htmlspecialchars($rep['message']).'<span></section>.';
   }

   echo   '<h2>Insérer une Réponse</h2>
          <form action="insert_rep.php" method="post">
           <table>
            <tr>
              <td>Auteur :</td>
              <td><input type="text" name="auteur" maxlength="30" size="50" value="'.htmlspecialchars($nom). ' '.htmlspecialchars($prenom). '"></td>
            </tr>
            <tr>
             <td>Message :</td>
             <td>
              <textarea name="message" cols="50" rows="10">';
              if ($message){ 
                echo htmlentities(trim($message));
              }
              echo'</textarea>
             </td>
            </tr>
            <tr>
             <td><td align="right"><input type="submit" name="go" value="Répondre"></td>
            </tr>
           </table>
          </form>';
   ?>
  </div>
</body>
</html>

0
kmorel Messages postés 13 Date d'inscription lundi 30 juillet 2018 Statut Membre Dernière intervention 22 octobre 2019
31 déc. 2018 à 14:28
Merci beaucoup Mr Jordan. j'ai essayé votre code mais jcela affiche toujours la même erreur.
Que dos je faire?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
31 déc. 2018 à 15:06
Une accolade manquante.
J'ai écrit le code de tête... il se peut qu'il y ait d'autres coquilles
<?php session_start();
//-------------------------------------------------------------------//
//Affichage des erreurs PHP (se place AU DEBUT du code)
//-------------------------------------------------------------------//
error_reporting(E_ALL); 
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//-------------------------------------------------------------------//
//connexion à la bdd
//-------------------------------------------------------------------//
try{
  $bdd =new PDO('mysql:host=localhost;dbname=cp1022993_reveil; charset=utf8', 'cp1022993_momo', 'ultimatum2018');
  // Activation des erreurs PDO
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());
}


//-------------------------------------------------------------------//
//recuperation PROPRE des variables AVANT de les utiliser
//-------------------------------------------------------------------//
$nom = !empty($_SESSION['nom']) ? $_SESSION['nom'] : "";
$prenom = !empty($_SESSION['prenom']) ? $_SESSION['prenom'] : "";

$auteur = !empty($_POST['auteur']) ? $_POST['auteur'] : NULL;
$titre = !empty($_POST['titre']) ? $_POST['titre'] : NULL;
$message = !empty($_POST['message']) ? $_POST['message'] : NULL;
$go = !empty($_POST['go']) ? $_POST['go'] : NULL;
$id_sujet_a_lire = !empty($_GET['id_sujet_a_lire']) ? $_GET['id_sujet_a_lire'] : NULL;

// on calcule la date actuelle
  $date = date("Y-m-d H:i:s");

//-------------------------------------------------------------------//
// Début du traitement du formulaire
//-------------------------------------------------------------------//
if ($go =='Poster') {
  
  // on teste la déclaration de nos variables
  if (!$auteur || !$titre || !$message) {
    $erreur = 'Au moins un des champs est vide.';
  }
} else {
 
  if (!$id_sujet_a_lire) {
    echo 'Sujet non défini.';
  } else {
    // préparation de la requête d'insertion (pour la table forum_rep)
    $sql = 'INSERT INTO forum_rep (forum_rep_id, forum_rep_auteur, message , date_rep) VALUES(:forum_rep__id, :forum_rep_auteur, :message, :date_rep)';
    $datas= array (':forum_rep__id'=> $id_sujet_a_lire,
        ':forum_rep_auteur'=> $auteur,
        ':message'=> $message,
        ':date_rep'=>$date
        );

    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
    try{ 
      $req = $bdd->prepare($sql);
      $req->execute($datas);
    } catch (Exception $e) {
      echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();
      exit(); // sinon tu ne verras jamais l'erreur avant la redirection !
    }

    // on redirige vers la page d'accueil
    header('Location: lire_sujet.php');
    // on termine le script courant
    exit();
    
  } 
}
//-------------------------------------------------------------------// 
//récupération des sujets
//-------------------------------------------------------------------//
  $sql = 'SELECT *  
          FROM forum_sujets 
          WHERE sujet_id=:sujet_id';
  $datas = array(':sujet_id'=>$id_sujet_a_lire);
  try{
    $req = $bdd->prepare($sql);
    $req->execute($datas);
    $sujets = $req->fetchAll(PDO::FETCH_ASSOC);
  }catch(Exception $e){
    echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();
  }
  //-------------------------------------------------------------------// 
  //récupération des répponses
  //-------------------------------------------------------------------//
  $sql = 'SELECT *  
          FROM forum_rep 
          WHERE forum_rep__id=:forum_rep_id';
  $resultat=array(':forum_rep__id'=>$id_sujet_a_lire);
  try{
    $req = $bdd->prepare($sql);
    $req->execute($datas);
    $reponses = $req->fetchAll(PDO::FETCH_ASSOC);
  }catch(Exception $e){
    echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();
  }
  
 ?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
  <!--[if lt IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></sxript><! [endif]-->
  <link rel="stylesheet" href=".css"/>
<title>Lecture d'un sujet</title>
</head>

<body>
  <div class="forum-item">
  <?php
   
  sscanf($sujets['date_derniere_reponse'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);
   
  echo  '<section class="auteur">
         <span class="auteur">' .htmlspecialchars($sujet['sujet_auteur']).'<br>
         <span class)"date">'.$jour.  '-'  .$mois.  '-'  .$annee.  ' '  .$heure.  ':'  .$minute.'<span>';
         '<span class="message">' .htmlspecialchars($sujet['sujet_messages']).'<span><section>';
   
   //on boucle sur les réponses au sujet :
   foreach($reponses as $rep){
     sscanf($reponse['date_rep'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $moi, $jou, $heur, $min, $sec);
     echo '<section class="rep">
     <span class="rep">' .htmlspecialchars($rep['forum_rep_auteur']).'<br>
     <span class)"date">'.$jou.  '-'  .$moi.  '-'  .$an.  ' '  .$heur.  ':'  .$min.'<span>';
     '<span class="message">' .htmlspecialchars($rep['message']).'<span></section>.';
   }

   echo   '<h2>Insérer une Réponse</h2>
          <form action="insert_rep.php" method="post">
           <table>
            <tr>
              <td>Auteur :</td>
              <td><input type="text" name="auteur" maxlength="30" size="50" value="'.htmlspecialchars($nom). ' '.htmlspecialchars($prenom). '"></td>
            </tr>
            <tr>
             <td>Message :</td>
             <td>
              <textarea name="message" cols="50" rows="10">';
              if ($message){ 
                echo htmlentities(trim($message));
              }
              echo'</textarea>
             </td>
            </tr>
            <tr>
             <td><td align="right"><input type="submit" name="go" value="Répondre"></td>
            </tr>
           </table>
          </form>';
   ?>
  </div>
</body>
</html>
0