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 ;-)
Votre commentaire