====== 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
----
===== Contexte et objectif =====
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 :
- Réorganiser cette application en **respectant le modèle MVC** (Modèle / Vue / Contrôleur).
- Implémenter une **évolution spécifique** de l’application (attribuée à chaque étudiant).
- Travail complémentaire : utiliser des classes
----
===== Ressources fournies =====
* Fichier **bibliotheque.php** (code initial)
* Script SQL **bibliotheque.sql** pour créer la base
===== Partie 1 – Application de départ =====
Le fichier fourni **bibliotheque.php** contient tout le code (HTML, PHP et SQL).
Le fichier **bibliotheque.php** est à enregistrer dans le dossier local de votre **serveur LAMP** (à installer selon le [[https://sio.lyc-lecastel.fr/doku.php?id=promo_2025:php:tp00&s[]=lamp|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**.
getMessage());
}
// Ajout d’un livre
if (!empty($_POST['titre']) && !empty($_POST['auteur']) && !empty($_POST['annee'])) {
$stmt = $db->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);
?>
Bibliothèque
Gestion de la bibliothèque
Liste des livres
- = $livre['titre'] ?> - = $livre['auteur'] ?> (= $livre['annee'] ?>)
-- 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"@"%";
===== Partie 2 – Objectif =====
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
===== Partie 3 – Évolutions =====
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
- **Étudiant 1 – Suppression d’un livre** (Morgann)
- Ajouter un bouton Supprimer dans la liste des livres.
- Implémenter la méthode de suppression dans le modèle.
- **Étudiant 2 – Recherche de livres** (Medhi)
- Ajouter un champ de recherche (titre/auteur).
- Implémenter une méthode de recherche dans le modèle.
- Afficher uniquement les résultats correspondants.
- **Étudiant 3 – Gestion des catégories** (Steve)
- Créer une table categories(id, nom).
- Associer chaque livre à une catégorie.
- Adapter le formulaire et l’affichage.
- **Étudiant 4 – Modification d’un livre** (Salomé)
- Ajouter un bouton Modifier dans la liste des livres.
- Permettre l’édition et la sauvegarde des informations du livre.
- **Étudiant 5 - Gestion du statut d’un livre (emprunté / disponible)** (Emile)
- ajouter un champ statut dans la table livres (par défaut "disponible").
- affichage du statut dans la liste + bouton "Emprunter" ou "Rendre".
- action changerStatut qui met à jour le champ.
Jalon3 : Evolution personnelle réalisée
L'application avec votre évolution sera le sujet de la revue de code de lundi, elle devra donc être **terminée pour lundi 15/09 14h**
======
===== Partie 4 – Améliorations du code =====
- utilisation d'un header.php et footer.php pour limiter les redondances de code
- utilisation de classes :
- LivreControleur avec 2 méthodes au départ : ajouterLivre() et listerLivres()
- Livre avec les méthodes getAll() et ajouter($titre, $auteur, $annee)
- Database avec la méthode connexionDB()
Jalon4 : Améliorations effectuée