Maintenant que vous savez comment remplacer vos textarea par un éditeur WYSIWYG, voyons comment parser le BBCode généré par celui-ci !
Code du tuto:
- nouveau_topic.php
<?php
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']);
$contenu = utf8_encode($contenu);
$contenu = str_replace('','',$contenu);
$contenu = utf8_decode($contenu);
$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');
?>
- topic.php
<?php
require_once('jbbcode/Parser.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'];
$parser = new JBBCode\Parser();
$parser->addCodeDefinitionSet(new JBBCode\DefaultCodeDefinitionSet());
$parser->addBBCode("quote", '<blockquote>{param}</blockquote>');
$parser->addBBCode("center", '<div align="center">{param}</div>');
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...');
}
?>
- views/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>
<?php
$parser->parse($topic['contenu']);
// Ou plutôt $parser->parse(nl2br($topic['contenu'])); afin de conserver les retours à la ligne !
echo $parser->getAsHtml();
?>
</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 } ?>
Votre commentaire