====== 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

===== 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. 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 – Evolution 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()