Afficher un topic

Par Clouder le 26 Feb 2019 (Édité) 4 +99

Afficher un topic de notre forum


Dans notre dossier f_forum, nous allons créer une nouvelle page topic.php. Cette page affichera le topique créé par un de vos utilisateur.


Nous allons également modifier notre fichier .htaccess afin d'appliquer l'URL souhaitée pour récupérer l'identifiant de la catégorie et l'identifiant du topique.


Fichier .htaccess


RewriteRule ^forum/([0-9]+)/([0-9]+)$ f_forum/topic?id_forum=$1&id_topic=$2


Ensuite dans notre page topic.php nous allons afficher le topique de qui est stocké dans la table topic.


Page topic.php


<?php
  session_start();
  include('../bd/connexionDB.php'); // Fichier PHP contenant la connexion à votre BDD  
  // Récupération de l'id de la catégorie
  $get_id_forum = (int) trim(htmlentities($_GET['id_forum'])); 
  // Récupération de l'id du topic
  $get_id_topic = (int) trim(htmlentities($_GET['id_topic']));
  // Si l'une des variables est vide alors on redirige vers la page forum
  if(empty($get_id_forum) || empty($get_id_topic)){
    header('Location: /forum');
    exit;
  }
  // On va sélectionner les informations nécessaire pour afficher notre topic
  $req = $DB->query("SELECT t.*, DATE_FORMAT(t.date_creation, 'Le %d/%m/%Y à %H\h%i') as date_c, U.prenom
    FROM topic T
    LEFT JOIN utilisateur U ON U.id = T.id_user
    WHERE t.id = ? AND t.id_forum = ?
    ORDER BY t.date_creation DESC", 
    array($get_id_topic, $get_id_forum));
  $req = $req->fetch();
  
  if(!isset($req['id'])){
    header('Location: /forum/' . $get_id_forum);
    exit;
  }  
?>
<!DOCTYPE html>
<html>
  <head>
    <base href="/"/>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
    <title>Topic</title>
    <link rel="stylesheet" href="../css/bootstrap.min.css"/>
    <link rel="stylesheet" href="../css/style.css"/>
  </head>
  <body>
    <?php
      require_once('../menu.php');    
      ?>
      <div class="container">
        <div class="row">   
          <div class="col-sm-0 col-md-0 col-lg-0"></div>
          <div class="col-sm-12 col-md-12 col-lg-12">
            <h1 style="text-align: center">Topic : <?= $req['titre'] ?></h1>
            <div style="background: white; box-shadow: 0 5px 15px rgba(0, 0, 0, .15); padding: 5px 10px; border-radius: 10px">
              <h3>Contenu</h3>
              <div style="border-top: 2px solid #eee; padding: 10px 0"><?= $req['contenu'] ?></div>
              <div style="color: #CCC; font-size: 10px; text-align: right">
                <?= $req['date_c'] ?>
                par 
                <?= $req['prenom'] ?>
              </div>              
            </div>
          </div>
        </div>
      </div>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
  </body>
</html>
Cette pub permet au site de vivre ...

4 commentaires

Tu veux participer ?
Alors connecte toi ou inscris toi et viens participer !

Hello @ops,


Si t'es toujours bloqué, crée un topic, la communauté sera ravie de t'aider au mieux 😁

Salut merci d'avoir répondu j'étais déborder c'est dernier temps je viens de voir bref.. 


sa marche toujours pas toujours la même erreur avec la variable $req . au passage mon fichier de connexion a BDD : 


  define('DB_HOST', 'localhost');
  define('DB_NAME', 'friendme');
  define('DB_USERNAME', 'root');
  define('DB_PASSWORD', '');

  try{
      $db = new PDO("mysql:host=" .DB_HOST.";dbname=".DB_NAME, DB_USERNAME, DB_PASSWORD);
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $db->query('SELECT * FROM users');

  } catch(PDOException $e){
    die('erreur: '. $e->getMessage());
    }
}
?>


j'ai essayer c'est que ta donner en haut mais sa ma afficher plusieurs erreurs du coup sa ma souler . je suis vraiment bloqué merci encore une fois big up

Met plutôt ceci : 


// Fichier PHP contenant la connexion à votre BDD
if(!empty($_GET['id_forum']) || !empty($_GET['id_topic'])){
   header('Location: /');
   exit;
}

$get_id_forum = (int) $_GET['id_forum']; 
$get_id_topic = (int) $_GET['id_topic']; 

global $db;

$req = $db->query("SELECT * FROM topic
   LEFT JOIN users
   ON users.id = topic.id_user
   WHERE topic.id = ? AND topic.id_forum = ?
   ORDER BY date_creation DESC", 
   array($get_id_topic, $get_id_forum));

$req = $req->fetch(); 


dans ton fichier DB met ceci : 

// Déclaration d'une nouvelle classe
class connexionDB {
   private $host    = 'localhost';    // nom de l'host
   private $name    = 'name_bdd';     // nom de la base de donnée
   private $user    = 'root';         // utilisateur
   private $pass    = 'root';         // mot de passe
   private $connexion;

   function __construct($host = null, $name = null, $user = null, $pass = null){
      if($host != null){
         $this->host = $host;           
         $this->name = $name;           
         $this->user = $user;          
         $this->pass = $pass;
      }
      try{
         $this->connexion = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name,
         $this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8', 
         PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
      }catch (PDOException $e){
         echo 'Erreur : Impossible de se connecter  à la BDD !';
         die();
      }
   }

   public function query($sql, $data = array()){
      $req = $this->connexion->prepare($sql);
      $req->execute($data);
      return $req;
   }

   public function insert($sql, $data = array()){
      $req = $this->connexion->prepare($sql);
      $req->execute($data);
   }
}

$DB = new connexionDB();

voila mon code 🙁 c'est mon sur Youtube

<?php
  $req->prepare("SELECT * 
    FROM topic LEFT JOIN users ON users.id = topic.id_user 
    WHERE topic.id = ? AND topic.id_forum = ? 
    ORDER BY date_creation DESC"); 
  $req->execute([$get_id_topic, $get_id_forum]); 
  $req->fetch();
?>
Cette pub permet au site de vivre ...