Créer un forum en PHP - #9 Finitions

PrimFX Boris ('PrimFX') Le 27 mars 2016

Dans ce dernier épisode de la série, je vous propose de créer quelques fonctions afin de fignoler un peu notre forum :-) Comme dit, vous avez toutes les clés en main pour améliorer ce forum (système d'édition, affichage du nombre de vues, etc.). Cependant, je ferai bien sûr des tutos annexes qui vous permettront d'améliorer ce forum au fil du temps ;-)

  • 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;
}
function reponse_nbr_categorie($id_categorie) {
   global $bdd;
   $nbr = $bdd->prepare('SELECT f_messages.id FROM f_messages LEFT JOIN f_topics_categories ON f_topics_categories.id_topic = f_messages.id_topic WHERE f_topics_categories.id_categorie = ?');
   $nbr->execute(array($id_categorie));
   return $nbr->rowCount();
}
function reponse_nbr_topic($id_topic) {
   global $bdd;
   $nbr = $bdd->prepare('SELECT f_messages.id FROM f_messages LEFT JOIN f_topics ON f_topics.id = f_messages.id_topic WHERE f_topics.id = ?');
   $nbr->execute(array($id_topic));
   return $nbr->rowCount();
}
function derniere_reponse_categorie($id_categorie) {
   global $bdd;
   $rep = $bdd->prepare('SELECT f_messages.* FROM f_messages LEFT JOIN f_topics_categories ON f_topics_categories.id_topic = f_messages.id_topic WHERE f_topics_categories.id_categorie = ? ORDER BY f_messages.date_heure_post DESC LIMIT 0,1');
   $rep->execute(array($id_categorie));
   if($rep->rowCount() > 0) {
      $rep = $rep->fetch();
      $dr = $rep['date_heure_post'];
      $dr .= '<br /> de '.get_pseudo($rep['id_posteur']);
   } else {
      $dr = 'Aucune réponse...';
   }
   return $dr;
}
function derniere_reponse_topic($id_topic) {
   global $bdd;
   $rep = $bdd->prepare('SELECT f_messages.* FROM f_messages LEFT JOIN f_topics ON f_topics.id = f_messages.id_topic WHERE f_topics.id = ? ORDER BY f_messages.date_heure_post DESC LIMIT 0,1');
   $rep->execute(array($id_topic));
   if($rep->rowCount() > 0) {
      $rep = $rep->fetch();
      $dr = $rep['date_heure_post'];
      $dr .= '<br /> de '.get_pseudo($rep['id_posteur']);
   } else {
      $dr = 'Aucune réponse...';
   }
   return $dr;
}
?>
  • views/forum.view.php
<table class="forum">
   <tr class="header">
      <th class="main">Catégories</th>
      <th class="sub-info messages hide-640">Réponses</th>
      <th class="sub-info messages hide-640">Vues</th>
      <th class="sub-info dmessage">Dernière réponse</th>
   </tr>
   <?php
   while($c = $categories->fetch()) {
      $subcat->execute(array($c['id']));
      $souscategories = '';
      while($sc = $subcat->fetch()) { 
         $souscategories .= '<a href="/PrimTemp/forum_topics.php?categorie='.url_custom_encode($c['nom']).'&souscategorie='.url_custom_encode($sc['nom']).'">'.$sc['nom'].'</a> | ';
      }
      $souscategories = substr($souscategories, 0, -3);
   ?>
   <tr class="categories">
      <td class="main">
         <h4><a href="/PrimTemp/forum_topics.php?categorie=<?= url_custom_encode($c['nom']) ?>"><?= $c['nom'] ?></a></h4>
         <p>
         <?= $souscategories ?>
         </p>
      </td>
      <td class="sub-info hide-640"><?= reponse_nbr_categorie($c['id']) ?></td>
      <td class="sub-info hide-640">999 999 999</td>
      <td class="sub-info"><?= derniere_reponse_categorie($c['id']) ?></td>
   </tr>
   <?php } ?>
</table>
  • views/forum_topics.view.php
<table class="forum">
   <tr class="header">
      <th class="main">Sujet</th>
      <th class="sub-info">Auteur</th>
      <th class="sub-info hide-640">Réponses</th>
      <th class="sub-info messages hide-640">Vues</th>
      <th class="sub-info">Dernière rép.</th>
   </tr>
   <?php while($t = $topics->fetch()) { ?>
   <tr>
      <td class="main">
         <h4><a href=""><a href="topic.php?titre=<?= url_custom_encode($t['sujet']) ?>&id=<?= $t['topic_base_id'] ?>"><?= $t['sujet'] ?></a></a></h4>
      </td>
      <td class="sub-info"><p><?= $t['pseudo'] ?></p><!-- <p>le <?= $t['date_heure_creation'] ?></p> --></td>
      <td class="sub-info hide-640"><p><?= reponse_nbr_topic($t['topic_base_id']) ?></p></td>
      <td class="sub-info hide-640"><p>1562</p></td>
      <td class="sub-info"><p><?= derniere_reponse_topic($t['topic_base_id']) ?></p></td>
   </tr>
   <?php } ?>
</table>
Sur ce, si vous avez des questions, propositions d'améliorations, etc. Je vous laisse en discuter sur le topic de ce nouveau forum que j'ai dédié à la création de celui-ci 😉

A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 22 ans et je suis passionné d'informatique. Suite à mes études (Licence Informatique puis MSc Computer Science au Trinity College Dublin), je gère l'entreprise Single Quote co-fondée en 2019 et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles 😃

Votre commentaire

Vous devez être connecté pour poster un commentaire. Se connecter ou Créer un compte

Commentaires 4

  • tiekoura_ Le 30 juillet, à 03:18 | Répondre

    merci pour cette formation ! j'ai beaucoup appris :-)

  • EnderMC Le 20 mai, à 11:48 | Répondre

    @lies19 tu peux pas étant donné que tu peux pas accéder aux fichiers

  • shab Le 6 juin, à 14:56 | Répondre

    merci bauceoup pour le forum j'ai appris bauceoup de chose durant tes tutos

  • lies19 Le 26 avril, à 18:34 | Répondre

    coment le integré dans le wordpress