CRÉER UN FORUM EN PHP - #5 Catégorie et sous-catégorie d'un nouveau topic


Dans le précédent tuto de la série, nous avons vu comment lister les topics en tenant compte des catégories et sous-catégories. Je vous propose donc aujourd'hui de voir comment lier tout ça lors de la création d'un nouveau topic :-)

  • views/forum_topic.view.php
<table class="forum">
   <tr class="header">
      <th class="main">Sujet</th>
      <th class="sub-info w10">Messages</th>
      <th class="sub-info w20">Dernier message</th>
      <th class="sub-info w20">Création</th>
   </tr>
   <?php while($t = $topics->fetch()) { ?>
   <tr>
      <td class="main">
         <h4><a href=""><?= $t['sujet'] ?></a></h4>
      </td>
      <td class="sub-info">4083495</td>
      <td class="sub-info">25.12.2015 à 18h07<br />de PrimFX</td>
      <td class="sub-info"><?= $t['date_heure_creation'] ?><br />par <?= $t['pseudo'] ?></td>
   </tr>
   <?php } ?>
</table>
<a href="/PrimTemp/nouveau_topic.php?categorie=<?= $id_categorie ?>">Créer un nouveau topic</a>
  • nouveau_topic.php
<?php
require('php/config.php'); /* Connexion à la base de donnée */
require('php/functions.php'); /* Mes fonctions */

if(isset($_GET['categorie'])) {
   $get_categorie = htmlspecialchars($_GET['categorie']);
   $categorie = $bdd->prepare('SELECT * FROM f_categories WHERE id = ?');
   $categorie->execute(array($get_categorie));
   $cat_exist = $categorie->rowCount();
   if($cat_exist == 1) {
      $categorie = $categorie->fetch();
      $categorie = $categorie['nom'];
      $souscategories = $bdd->prepare('SELECT * FROM f_souscategories WHERE id_categorie = ? ORDER BY nom');
      $souscategories->execute(array($get_categorie));
      if(isset($_SESSION['id'])) {
         if(isset($_POST['tsubmit'])) {
            if(isset($_POST['tsujet'],$_POST['tcontenu'])) {
               $sujet = htmlspecialchars($_POST['tsujet']);
               $contenu = htmlspecialchars($_POST['tcontenu']);
               $souscategorie = htmlspecialchars($_POST['souscategorie']);
               $verify_sc = $bdd->prepare('SELECT id FROM f_souscategories WHERE id = ? AND id_categorie = ?');
               $verify_sc->execute(array($souscategorie,$get_categorie));
               $verify_sc = $verify_sc->rowCount();
               if($verify_sc == 1) {
                  if(!empty($sujet) AND !empty($contenu)) {
                     if(strlen($sujet) <= 70) {
                        if(isset($_POST['tmail'])) {
                           $notif_mail = 1;
                        } else {
                           $notif_mail = 0;
                        }
                        $ins = $bdd->prepare('INSERT INTO f_topics (id_createur, sujet, contenu, notif_createur, date_heure_creation) VALUES(?,?,?,?,NOW())');
                        $ins->execute(array($_SESSION['id'],$sujet,$contenu,$notif_mail));
                        
                        $lt = $bdd->query('SELECT id FROM f_topics ORDER BY id DESC LIMIT 0,1');
                        $lt = $lt->fetch();
                        $id_topic = $lt['id'];
                        $ins = $bdd->prepare('INSERT INTO f_topics_categories (id_topic, id_categorie, id_souscategorie) VALUES (?,?,?)');
                        $ins->execute(array($id_topic, $get_categorie, $souscategorie));
                     } else {
                        $terror = "Votre sujet ne peut pas dépasser 70 caractères";
                     }
                  } else {
                     $terror = "Veuillez compléter tous les champs";
                  }
               } else {
                  $terror = "Sous-catégorie invalide";
               }
            }
         }
      } else {
         $terror = "Veuillez vous connecter pour poster un nouveau topic";
      }
   } else {
      die('Catégorie invalide...');
   }
} else {
   die('Aucune catégorie définie...');
}

require('views/nouveau_topic.view.php'); /* Inclusion du fichier vue */
?>
  • views/nouveau_topic.view.php
<form class="fntopic" method="POST">
     <table class="forum ntopic">
      <tr class="header">
         <th class="main">Nouveau Topic</th>
         <th></th>
      </tr>
      <tr>
         <td>Sujet</td>
         <td><input type="text" name="tsujet" size="70" maxlength="70" /></td>
      </tr>
      <tr>
         <td>Catégorie</td>
         <td>
         <?= $categorie ?>
         </td>
      </tr>
      <tr>
         <td>Sous-Catégorie</td>
         <td>
            <select name="souscategorie">
               <?php while($sc = $souscategories->fetch()) { ?>
               <option value="<?= $sc['id'] ?>"><?= $sc['nom'] ?></option>
               <?php } ?>
            </select>
         </td>
      </tr>
      <tr>
         <td>Message</td>
         <td><textarea name="tcontenu"></textarea></td>
      </tr>
      <tr>
         <td>Me notifier des réponses par mail</td>
         <td><input type="checkbox" name="tmail" /></td>
      </tr>
      <tr>
         <td colspan="2"><input type="submit" name="tsubmit" value="Poster le Topic" /></td>
      </tr>
      <?php if(isset($terror)) { ?>
      <tr>
         <td colspan="2"><?= $terror ?></td>
      </tr>
      <?php } ?>
   </table>
</form>
Une question ? Des idées de fonctionnalités, d'amélioration du code, ou d'autres propositions ? L'espace commentaire est juste en-dessous ;-)

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

9 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 isaac

    isaac

    16 February 2016 à 09:37

    primfx tes vidéos sont superbes mais j'ai un probleme,j'ai cree un espace membre avec une page profil avec ecrit dans l'url profil.php?id=l'id de la personne mais on peut le changer donc la page profil n'est pas protégé

    est ce que tu as une condition

  • Photo de profil de Foxxen

    Foxxen

    16 February 2016 à 12:01

    @isaac Salut, pour sa tu fait une condition avec les session et tu vérifie si l'id dans la session correspond à celui de l'url, et si il ne correspond pas soit tu affiche d'autres info ou alors tu redirige la personne vers le bon url, ce qui donnerait :



    if($_GET['id'] != $_SESSION['id']){

    ...

    }else{

    ...

    }

  • Photo de profil de ali

    ali

    17 February 2016 à 23:06

    salut, est ce qu'il y'a une partie admin?

  • Photo de profil de xXCHAMP0MYXx

    xXCHAMP0MYXx

    18 February 2016 à 21:50

    Tu devrais faire un tutoriel sur la création d'un support par ticket en PHP sa serais vraiment cool

    Car la ses la galère je n'y arrive même pas à faire la structure 😋

  • Photo de profil de barundure

    barundure

    13 April 2016 à 10:09

    salut PrimFx.j'ai un problème sur la récupération des informations dans la BDD. En faite quand je clique sur catégorie Programmation et que je choisi HTML par exemple, normalement ça doit m'affiché le son contenu propre à la sous-catégorie HTML.Mais le contenu est le même pour tous les sous-catégories qui se trouve à ma BDD, que ça soit CSS, Ruby, Java,....

    Pourriez-vous m'aider SVP?

    Cordialement

  • Photo de profil de barundure

    barundure

    15 April 2016 à 09:01

    Salut!j'ai toujours le même problème qu'auparavant!

    Si je poste une question sur la catégorie programmation et sous catégorie HTML par exemple, et que tente d'affiche les questions posées sur ladite sous catégorie s'affiche mais c'est pour toutes les sous-catégories disponible même ceux qui ne sont pas concernées, C'est un comportement anormal!Pouvez-vous m'aider SVP?

    Je suis bloquer sur ce niveau. J'ai pas pu trouvé là ou je me suis trompé!

    Cordialement!

  • Photo de profil de caca

    caca

    03 September 2016 à 14:27

    @isaac donc on affiche quoi

  • Photo de profil de sebyseb

    sebyseb

    29 January 2017 à 00:10

    Bonsoir,



    j'ai un soucis depuis cette étape, quand je poste un topic, il s'archive bien dans la base de donné mais quand la page se recharge j'ai l'erreur suivante :

    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\Test\tuto 19 - Le forum\views\nouveau_topic.view.php on line 29



    voila mon code :



    <td>Sous - catégorie</td>

    <td>

    <select name="souscategorie">

    <?php while ($sc = $souscategorie->fetch()) { ?>

    <option value="<?=$sc['id'] ?>"><?=$sc['nom'] ?></option>

    <?php } ?>

    </select>

    </td>

    Si quelqu'un peut m'aider ca serait super cool

  • Photo de profil de carterdox

    carterdox

    09 August 2017 à 21:07

    Salut je suis bloquer "Erreur: Aucune catégorie sélectionnée..." svp help