Un tuto assez long dans lequel je vous propose de voir comment afficher nos topics en les triant par catégories et sous-catégories. Comme dit dans la vidéo, je fais en sorte de ne pas avoir à passer l'id de la catégorie dans l'URL, c'est pourquoi le code est assez long pour ce qui est des vérifications (et donc de la sécurisation du site)... Après, à vous de voir comment vous souhaitez faire passer vos données entre les pages 😛 A noter que les URLs seront prochainement "embellies" grâce à l'URL Rewriting ;-)
- forum_topic.php
<?php
require('php/config.php'); /* Connexion à la bdd */
require('php/functions.php'); /* Mes fonctions */
if(isset($_GET['categorie']) AND !empty($_GET['categorie'])) {
$get_categorie = htmlspecialchars($_GET['categorie']);
$categories = array();
$req_categories = $bdd->query('SELECT * FROM f_categories');
while($c = $req_categories->fetch()) {
array_push($categories, array($c['id'],url_custom_encode($c['nom'])));
}
foreach($categories as $cat) {
if(in_array($get_categorie, $cat)) {
$id_categorie = intval($cat[0]);
}
}
if(@$id_categorie) {
if(isset($_GET['souscategorie']) AND !empty($_GET['souscategorie'])) {
$get_souscategorie = htmlspecialchars($_GET['souscategorie']);
$souscategories = array();
$req_souscategories = $bdd->prepare('SELECT * FROM f_souscategories WHERE id_categorie = ?');
$req_souscategories->execute(array($id_categorie));
while($c = $req_souscategories->fetch()) {
array_push($souscategories, array($c['id'],url_custom_encode($c['nom'])));
}
foreach($souscategories as $cat) {
if(in_array($get_souscategorie, $cat)) {
$id_souscategorie = intval($cat[0]);
}
}
}
$req = "SELECT * FROM f_topics
LEFT JOIN f_topics_categories ON f_topics.id = f_topics_categories.id_topic
LEFT JOIN f_categories ON f_topics_categories.id_categorie = f_categories.id
LEFT JOIN f_souscategories ON f_topics_categories.id_souscategorie = f_souscategories.id
LEFT JOIN membres ON f_topics.id_createur = membres.id
WHERE f_categories.id = ?";
if(@$id_souscategorie) {
$req .= " AND f_souscategories.id = ?";
$exec_array = array($id_categorie,$id_souscategorie);
} else {
$exec_array = array($id_categorie);
}
$req .= " ORDER BY f_topics.id DESC";
$topics = $bdd->prepare($req);
$topics->execute($exec_array);
} else {
die('Erreur: Catégorie introuvable...');
}
} else {
die('Erreur: Aucune catégorie sélectionnée...');
}
require('views/forum_topics.view.php');
?>
- 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>
- views/forum.view.php (pour la petite modification de l'URL)
<table class="forum">
<tr class="header">
<th class="main">Catégories</th>
<th class="sub-info messages">Messages</th>
<th class="sub-info dmessage">Dernier message</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>
<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">4083495</td>
<td class="sub-info">04.12.2015 à 14h52<br />de PrimFX</td>
</tr>
<?php } ?>
</table>
- php/functions.php (fonction url_custom_encode())
function url_custom_encode($titre) {
$titre = htmlspecialchars($titre);
$find = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Œ', 'œ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Š', 'š', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Ÿ', '?', '?', '?', '?', 'Ž', 'ž', '?', 'ƒ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?');
$replace = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?');
$titre = str_replace($find, $replace, $titre);
$titre = strtolower($titre);
$mots = preg_split('/[^A-Z^a-z^0-9]+/', $titre);
$encoded = "";
foreach($mots as $mot) {
if(strlen($mot) >= 3 OR str_replace(['0','1','2','3','4','5','6','7','8','9'], '', $mot) != $mot) {
$encoded .= $mot.'-';
}
}
$encoded = substr($encoded, 0, -1);
return $encoded;
}
Comme d'habitude, si vous avez des idées, propositions, ou autre, l'espace commentaire est là !
PS: Pour la fonction url_custom_encode(), vous remarquerez sans doute qu'elle possède quelques failles, notamment pour la sous-catégorie C++ (à cause des "+")... Nous verrons comment corriger ça dans un prochain épisode, et je mettrai à jour le code de la fonction ;-)
Votre commentaire