Page 14 : La Liste des Articles - Analyse Pédagogique
Afficher une liste de données semble simple, mais bien le faire demande de l’organisation. Voici le découpage du fichier admin-list-article.php.
Étape 1 : Protection et Outils
On commence toujours par sécuriser la page.
<?php
declare(strict_types=1);
session_start();
require_once 'database/database.php';
require_once 'helpers.php';
if ($_SESSION['role'] !== 'admin') {
header('Location: index.php');
exit();
}
Étape 2 : Préparation de la Recherche
On regarde si l’utilisateur a tapé quelque chose dans la barre de recherche.
$searchTerm = '';
if (isset($_POST['search'])) {
$searchTerm = clean_input((string) ($_POST['search'] ?? ''));
}
Étape 3 : Construction de la requête SQL (Dynamique)
C’est ici que l’intelligence du code se trouve. On adapte la requête selon qu’il y a une recherche ou non.
$query = 'SELECT * FROM articles';
// Si une recherche est demandée, on ajoute un filtre WHERE
if (!empty($searchTerm)) {
$query .= ' WHERE title LIKE :searchTerm OR introduction LIKE :searchTerm';
}
$query .= ' ORDER BY created_at DESC';
- Analyse : Remarquez l’espace au début des chaînes concaténées (
.= ' WHERE...'). C’est crucial pour ne pas coller les mots SQL entre eux.
Étape 4 : Exécution Sécurisée (PDO)
On prépare et on injecte les données.
$resultats = $pdo->prepare($query);
if (!empty($searchTerm)) {
// On entoure le terme de % pour chercher "n'importe où" dans le texte
$resultats->bindValue(':searchTerm', '%' . $searchTerm . '%');
}
$resultats->execute();
$allArticles = $resultats->fetchAll(PDO::FETCH_ASSOC);
- Analyse :
bindValueprotège contre les injections SQL en traitant l’entrée comme du texte pur, jamais comme une commande.
Étape 5 : Mise en page (Templating)
On prépare le titre et on injecte le tout dans le layout.
$pageTitle = 'Gestion des Articles';
ob_start();
require_once 'resources/views/admin/articles/list-article_html.php';
$pageContent = ob_get_clean();
require_once 'resources/views/layouts/admin-layout/admin-layout_html.php';
- Analyse :
ob_start()etob_get_clean()permettent de capturer tout le HTML produit parlist-article_html.phpet de le stocker dans$pageContent.
Ce découpage permet de bien séparer le traitement des données (en haut du fichier) de l’affichage (en bas du fichier).
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Page 14 : La Liste des Articles - Analyse Pédagogique. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.