d3:a01

Ceci est une ancienne révision du document !


TP01 : Réorganisation et évolution d’une application PHP (MVC)

  • Durée : 4 heures
  • Technologie : PHP natif + MySQL
  • Contraintes : pas de framework, architecture MVC imposée.
  • JalonXX : indique une validation à faire auprès de Mme Thevenot avant de passer à la suite du travail

Voici une application PHP non structurée en MVC de gestion d'une bibliothèque. Cette application permet :

  • d’ajouter des livres dans une base de données
  • d’afficher la liste des livres existants.

Votre mission est de :

  1. Réorganiser cette application en respectant le modèle MVC (Modèle / Vue / Contrôleur).
  2. Implémenter une évolution spécifique de l’application (attribuée à chaque étudiant).
  3. Travail complémentaire : utiliser des classes

  • Fichier bibliotheque.php (code initial)
  • Script SQL bibliotheque.sql pour créer la base

Le fichier fourni bibliotheque.php contient tout le code (HTML, PHP et SQL).

Note: Le fichier bibliotheque.php est à enregistrer dans le dossier local de votre serveur LAMP (à installer selon le modèle de l'an dernier en transposant sous votre système Windows), dans un dossier D3-A01BibliMVC - Ce dossier devra être synchronisé avec un dépôt du même nom dans votre gitea.

bibliotheque.php
<?php
 
$ip = 'localhost'; 
$user = 'adminBibli'; 
$pass = 'mdpBibli'; 
$database = 'bdbibliotheque'; 
// Définition de la source des données pour PDO 
 
$dsn = "mysql:host=$ip;dbname=$database;charset=utf8mb4"; 
 
// Création de l'objet $dbh, de type PDO, qui est la ressource d'accès à la base 
try { 
 
$db = new PDO($dsn, $user, $pass); 
 
 } catch (PDOException $e) { 
 
die("Erreur de connexion : ".$e->getMessage());  
} 
 
// Ajout d’un livre
if (!empty($_POST['titre']) && !empty($_POST['auteur']) && !empty($_POST['annee'])) {
    $stmt = $conn->prepare("INSERT INTO livres (titre, auteur, annee) VALUES (?, ?, ?)");
    $stmt->execute([$_POST['titre'], $_POST['auteur'], $_POST['annee']]);
}
 
// Récupération des livres
$stmt = $db->query("SELECT * FROM livres");
$livres = $stmt->fetchAll(PDO::FETCH_ASSOC);
 
?>
 
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Bibliothèque</title>
</head>
<body>
    <h1>Gestion de la bibliothèque</h1>
 
    <form method="POST">
        <label>Titre : <input type="text" name="titre"></label><br>
        <label>Auteur : <input type="text" name="auteur"></label><br>
        <label>Année : <input type="number" name="annee"></label><br>
        <button type="submit">Ajouter</button>
    </form>
 
    <h2>Liste des livres</h2>
    <ul>
        <?php foreach ($livres as $livre): ?>
            <li><?= $livre['titre'] ?> - <?= $livre['auteur'] ?> (<?= $livre['annee'] ?>)</li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

Script de la base de données à importer dans votre serveur LAMP :

bibliotheque.sql
-- Base de données pour l'application Bibliothèque
CREATE DATABASE IF NOT EXISTS bdbibliotheque
  DEFAULT CHARACTER SET utf8mb4
  COLLATE utf8mb4_general_ci;
 
USE bdbibliotheque;
 
-- Table des livres
CREATE TABLE IF NOT EXISTS livres (
    id INT AUTO_INCREMENT PRIMARY KEY,
    titre VARCHAR(100) NOT NULL,
    auteur VARCHAR(100) NOT NULL,
    annee INT NOT NULL
);
 
-- Données de test
INSERT INTO livres (titre, auteur, annee) VALUES
('1984', 'George Orwell', 1949),
('Le Petit Prince', 'Antoine de Saint-Exupéry', 1943),
('L’Étranger', 'Albert Camus', 1942);
 
-- Compte utilisateur administrateur pour accès distant à la base de données
CREATE USER 'adminBibli'@'%' IDENTIFIED BY 'mdpBibli';
GRANT ALL PRIVILEGES ON bdbibliotheque.* to "adminBibli"@"%";

Jalon0 : Tester la version initiale non organisée selon le modèle MVC

Réorganiser ce code en respectant le schéma MVC :

  • Modèle : gestion des livres et accès BDD.
  • Contrôleur : réception des actions (ajouter, lister, etc.), le contrôleur appelle les fonctions du modèle et charge la vue correspondante.
  • Vues : uniquement du HTML + affichage, les vues sont séparées
  • à la racine le fichier index.php est la page d'accueil qui sert de routeur (choix de l’action → appel du contrôleur).

Jalon1 : Proposer une arborescence avec les fichiers et leur rôle précis

Coder et vérifier que l’application fonctionne toujours avec deux fonctionnalités de base :

  • Ajouter un livre
  • Afficher la liste des livres

Jalon2 : Validation du fonctionnement de l'application initiale en respectant le modèle MVC

Chaque étudiant implémente une évolution en respectant le MVC.

Chaque évolution doit impliquer :

  • une modification du modèle
  • une adaptation du contrôleur
  • une mise à jour de la vue
  1. Étudiant 1 – Suppression d’un livre
    1. Ajouter un bouton Supprimer dans la liste des livres.
    2. Implémenter la méthode de suppression dans le modèle.
  2. Étudiant 2 – Recherche de livres
    1. Ajouter un champ de recherche (titre/auteur).
    2. Implémenter une méthode de recherche dans le modèle.
    3. Afficher uniquement les résultats correspondants.
  3. Étudiant 3 – Gestion des catégories
    1. Créer une table categories(id, nom).
    2. Associer chaque livre à une catégorie.
    3. Adapter le formulaire et l’affichage.
  4. Étudiant 4 – Modification d’un livre
    1. Ajouter un bouton Modifier dans la liste des livres.
    2. Permettre l’édition et la sauvegarde des informations du livre.
  1. utilisation d'un header.php et footer.php pour limiter les redondances de code
  2. utilisation de classes :
    1. LivreControleur avec 2 méthodes au départ : ajouterLivre() et listerLivres()
    2. Livre avec les méthodes getAll() et ajouter($titre, $auteur, $annee)
    3. Database avec la méthode connexionDB()
  • d3/a01.1757330986.txt.gz
  • Dernière modification : 2025/09/08 13:29
  • de dthevenot