CRÉER UN FORUM EN PHP - #8 Afficher les réponses


Nous avons précédemment vu comment poster des réponses à un topic... Voyons maintenant comment les afficher, avec en bonus l'utilisation d'un petit système de pagination 😀


Code de la vidéo:
  • topic.php
<?php
require('php/config.php');
require('php/functions.php');
require('php/functions_forum.php');
if(isset($_GET['titre'],$_GET['id']) AND !empty($_GET['titre']) AND !empty($_GET['id'])) {
   $get_titre = htmlspecialchars($_GET['titre']);
   $get_id = htmlspecialchars($_GET['id']);
   $titre_original = $bdd->prepare('SELECT sujet FROM f_topics WHERE id = ?');
   $titre_original->execute(array($get_id));
   $titre_original = $titre_original->fetch()['sujet'];
   if($get_titre == url_custom_encode($titre_original)) {
      $topic = $bdd->prepare('SELECT * FROM f_topics WHERE id = ?');
      $topic->execute(array($get_id));
      $topic = $topic->fetch();
      if(isset($_POST['topic_reponse_submit'],$_POST['topic_reponse'])) {
         $reponse = htmlspecialchars($_POST['topic_reponse']);
         if(isset($_SESSION['id'])) {
            if(!empty($reponse)) {
               $ins = $bdd->prepare('INSERT INTO f_messages(id_topic,id_posteur,contenu,date_heure_post) VALUES (?,?,?,NOW())');
               $ins->execute(array($get_id,$_SESSION['id'],$reponse));
               $reponse_msg = "Votre réponse a bien été postée";
               unset($reponse);
            } else {
               $reponse_msg = "Votre réponse ne peut pas être vide !";
            }
         } else {
            $reponse_msg = "Veuillez vous connecter ou créer un compte pour poster une réponse";
         }
      }
      if(isset($_GET['page']) AND $_GET['page'] > 1) {
         $reponsesParPage = 6;
      } else {
         $reponsesParPage = 5;
      }
      $reponsesTotalesReq = $bdd->prepare('SELECT * FROM f_messages WHERE id_topic = ?');
      $reponsesTotalesReq->execute(array($get_id));
      $reponsesTotales = $reponsesTotalesReq->rowCount();
      $pagesTotales = ceil($reponsesTotales/$reponsesParPage);
      if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $pagesTotales) {
         $_GET['page'] = intval($_GET['page']);
         $pageCourante = $_GET['page'];
      } else {
         $pageCourante = 1;
      }
      $depart = ($pageCourante-1)*$reponsesParPage;
      $reponses = $bdd->prepare('SELECT * FROM f_messages WHERE id_topic = ? LIMIT '.$depart.','.$reponsesParPage);
      $reponses->execute(array($get_id));
   } else {
      die('Erreur: Le titre ne correspond pas à l\'id');
   }
   require('views/topic.view.php');
} else {
   die('Erreur...');
}
?>
  • topic.view.php
<table class="forum">
   <tr class="header">
      <th class="sub-info w10">Auteur</th>
      <th class="main center">Sujet: <?= $topic['sujet'] ?></th>
   </tr>
   <?php if($pageCourante == 1) { ?>
   <tr>
      <td><?= get_pseudo($topic['id_createur']) ?></td>
      <td><?= $topic['contenu'] ?></td>
   </tr>
   <?php } ?>
   <?php while($r = $reponses->fetch()) { ?>
   <tr>
      <td><?= get_pseudo($r['id_posteur']) ?></td>
      <td><?= $r['contenu'] ?></td>
   </tr>
   <?php } ?>
</table>
<?php
  for($i=1;$i<=$pagesTotales;$i++) {
     if($i == $pageCourante) {
        echo $i.' ';
     } else {
        echo '<a href="topic.php?titre='.$get_titre.'&id='.$get_id.'&page='.$i.'">'.$i.'</a> ';
     }
  }
 ?>
<br />
<?php if(isset($_SESSION['id'])) { ?>
   <form method="POST">
      <textarea placeholder="Votre réponse" name="topic_reponse" style="width:80%"><?php if(isset($reponse)) { echo $reponse; } ?></textarea><br />
      <input type="submit" name="topic_reponse_submit" value="Poster ma réponse"></form>
   </form>
   <?php if(isset($reponse_msg)) { echo $reponse_msg; } ?>
<?php } else { ?>
   <p>Veuillez vous connecter ou créer un compte pour poster une réponse</p>
<?php } ?>
  • php/functions_forum.php
<?php
function get_pseudo($id) {
   global $bdd;
   $pseudo = $bdd->prepare('SELECT pseudo FROM membres WHERE id = ?');
   $pseudo->execute(array($id));
   $pseudo = $pseudo->fetch()['pseudo'];
   return $pseudo;
}
?>

A propos de l'auteur

PrimFX
PrimFX

Salut tout le monde ! Je m'appelle Boris, j'ai 18 ans et je suis passionné d'informatique et de technologie. Je partage cette passion à travers mes vidéos que tu peux retrouver sur YouTube sous le nom de PrimFX ou bien sur ce site bien sûr (tutoriels de programmation (HTML, CSS, PHP), gameplays, vlogs high-tech...). @+

A voir aussi

2 Commentaires

POSTER UN COMMENTAIRE

Vous devez être connecté pour pouvoir poster un commentaire...

Pas encore de compte ? Créez-en un ici !



  • Photo de profil de Foxxen

    Foxxen

    07 March 2016 à 22:09

    Salut, il y à un petit bug avec la pagination (enfin je croit puisque j'ai changer quelques trucs), quand il y à 6 réponses,tout marche donc sa affiche deux pages mais ensuit sa met la 6ème réponse sur la première page et dès qu'il y en à 7ème, la 6ème réponse disparait



    Des screens :

    http://www.noelshack.com/2016-10-1457384740-bdd.jpg La bdd

    http://www.noelshack.com/2016-10-1457384740-topic-1.jpg Page 1 du topic

    http://www.noelshack.com/2016-10-1457384741-topic-2.jpg Page 2 du topic







    Il n'y à que 6 réponses qui s'affichent au lieu de 7, voila, laissez moi savoir

  • Photo de profil de Foxxen

    Foxxen

    09 March 2016 à 16:53

    @Foxxen Problème résolu, il suffisait d'enlever sa :



    if(isset($_GET['page']) AND $_GET['page'] > 1) {

    $reponsesParPage = 6;

    } else {

    $reponsesParPage = 5;

    }

    Et de mettre :



    $reponsesParPage = le nombre de réponses souhaiter;