d3:a01

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 = $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);
 
?>
 
<!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>

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 (Morgann)
    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 (Medhi)
    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 (Steve)
    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 (Salomé)
    1. Ajouter un bouton Modifier dans la liste des livres.
    2. Permettre l’édition et la sauvegarde des informations du livre.
  5. Étudiant 5 - Gestion du statut d’un livre (emprunté / disponible) (Emile)
    1. ajouter un champ statut dans la table livres (par défaut “disponible”).
    2. affichage du statut dans la liste + bouton “Emprunter” ou “Rendre”.
    3. action changerStatut qui met à jour le champ.

Attention: 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

  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.txt
  • Dernière modification : 2025/09/08 17:28
  • de dthevenot