TP - Opérations CRUD en PHP/MySQL

Apprentissage progressif des opérations Create, Read, Update, Delete avec Bootstrap 5

Fichiers de base du TP

Téléchargez l'archive contenant tous les fichiers nécessaires pour réaliser ce TP

Télécharger les fichiers de base

L'archive contient : structure SQL, fichier de configuration et les 3 étapes du TP

Objectifs du TP

Ce TP vous permettra d'acquérir les compétences suivantes :

  • Maîtriser les opérations CRUD (Create, Read, Update, Delete) en PHP
  • Utiliser PDO pour interagir avec une base de données MySQL de manière sécurisée
  • Implémenter une interface utilisateur moderne avec Bootstrap 5
  • Comprendre l'évolution d'une application : du PHP classique vers AJAX
  • Appliquer les bonnes pratiques de sécurité (hachage de mots de passe, requêtes préparées)
  • Créer une API REST simple et consommer ses données en JavaScript

Prérequis techniques

  • Serveur web avec PHP 7.4+ (XAMPP, WAMP, MAMP)
  • MySQL ou MariaDB
  • Navigateur web moderne (Chrome, Firefox, Edge)
  • Éditeur de code (VS Code, PHPStorm, Sublime Text)

Connaissances requises

  • Bases du langage PHP
  • Notions de SQL (SELECT, INSERT, UPDATE, DELETE)
  • HTML et CSS de base
  • JavaScript (pour l'étape 3)

Structure de la base de données

Le TP utilise une table users avec la structure suivante :

Colonne Type Contraintes Description
id INT PRIMARY KEY, AUTO_INCREMENT Identifiant unique de l'utilisateur
email VARCHAR(255) UNIQUE, NOT NULL Adresse email de l'utilisateur
password VARCHAR(255) NOT NULL Mot de passe haché
role ENUM NOT NULL, DEFAULT 'guest' Rôle : guest author editor admin
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP Date de création
updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP Date de dernière modification

Les 3 étapes du TP

1

CRUD avec fichiers séparés

Approche classique avec un fichier PHP pour chaque opération.

Fichiers à créer :
  • index.php - Liste des utilisateurs
  • create.php - Formulaire de création
  • view.php - Affichage détaillé
  • edit.php - Modification
  • delete.php - Suppression
Concepts abordés :
  • Connexion PDO
  • Requêtes préparées
  • Navigation entre pages
  • Messages flash avec GET
2

CRUD dans un seul fichier

Centralisation de toutes les opérations dans index.php.

Architecture :
  • Un seul point d'entrée
  • Routage par paramètres GET
  • Actions : list, create, view, edit, delete
  • Switch/case pour le contrôle
Avantages :
  • Code plus maintenable
  • Moins de duplication
  • Navigation simplifiée
  • Structure MVC embryonnaire
3

CRUD avec AJAX

Interface moderne sans rechargement de page.

Technologies :
  • api.php - API REST JSON
  • JavaScript avec Fetch API
  • Async/await
  • Modales Bootstrap
Fonctionnalités :
  • Opérations asynchrones
  • Notifications en temps réel
  • Validation côté client
  • Indicateur de chargement

Installation et démarrage

  1. Télécharger et extraire l'archive

    Extraire le fichier ZIP dans le répertoire de votre serveur web (htdocs, www, etc.)

  2. Créer la base de données

    Importer le fichier database.sql dans phpMyAdmin ou via la ligne de commande :

    mysql -u root -p < database.sql
  3. Configurer la connexion

    Modifier les paramètres dans config.php si nécessaire :

    define('DB_HOST', 'localhost');
    define('DB_NAME', 'tp_crud_php');
    define('DB_USER', 'root');
    define('DB_PASS', '');
  4. Accéder au TP

    Ouvrir votre navigateur et accéder aux différentes étapes :

    • Étape 1 : http://localhost/tp-crud-php/etape1/
    • Étape 2 : http://localhost/tp-crud-php/etape2/
    • Étape 3 : http://localhost/tp-crud-php/etape3/

Bonnes pratiques de sécurité

Protection contre les injections SQL
  • Toujours utiliser les requêtes préparées PDO
  • Ne jamais concaténer directement les variables dans les requêtes
  • Exemple :
    // ❌ Mauvais
    $sql = "SELECT * FROM users WHERE email = '$email'";
    
    // ✅ Bon
    $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
    $stmt->execute([$email]);
Gestion des mots de passe
  • Utiliser password_hash() pour le hachage
  • Vérifier avec password_verify()
  • Ne jamais stocker en clair
  • Exemple :
    // Hachage
    $hash = password_hash($password, PASSWORD_DEFAULT);
    
    // Vérification
    if (password_verify($password, $hash)) {
        // Mot de passe correct
    }

Exercices complémentaires

  1. Ajouter les champs "nom" et "prénom" à la table users
  2. Implémenter une fonction de recherche par email
  3. Ajouter la pagination (10 utilisateurs par page)
  4. Créer un compteur affichant le nombre total d'utilisateurs
  5. Ajouter une confirmation JavaScript avant suppression

  1. Créer un système de connexion/déconnexion avec sessions
  2. Implémenter des permissions selon les rôles (admin peut tout faire, editor peut modifier, etc.)
  3. Ajouter des filtres (par rôle, date de création)
  4. Créer un export CSV/Excel des utilisateurs
  5. Implémenter un système de tri sur les colonnes du tableau
  6. Ajouter la possibilité de modifier plusieurs utilisateurs en même temps

  1. Implémenter la protection CSRF avec tokens
  2. Ajouter un système d'upload de photo de profil avec redimensionnement
  3. Créer un historique des modifications (qui a modifié quoi et quand)
  4. Implémenter une API REST complète avec authentification JWT
  5. Ajouter la validation côté serveur avec une bibliothèque (Respect\Validation)
  6. Créer un système de rôles dynamiques (créer/modifier des rôles)
  7. Implémenter un système de notification en temps réel avec WebSockets

Critères d'évaluation

Fonctionnalités (50%)
  • Toutes les opérations CRUD fonctionnent correctement
  • La validation des données est implémentée
  • Les messages d'erreur et de succès s'affichent
  • L'interface est responsive et ergonomique
Qualité du code (50%)
  • Code bien structuré et commenté
  • Respect des bonnes pratiques de sécurité
  • Utilisation correcte de PDO
  • Séparation des responsabilités
  • Gestion appropriée des erreurs