Tp php blog
Thème :
Junior
1 vues ·14/20 leçons

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 : bindValue protè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() et ob_get_clean() permettent de capturer tout le HTML produit par list-article_html.php et 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.