Ce projet est un exemple pratique d'implémentation des opérations CRUD (Create, Read, Update, Delete) en PHP avec MySQL. Il simule un système de gestion de bibliothèque permettant de gérer les membres et d'afficher les livres.
À la fin de ce cours, vous saurez :
- Établir une connexion sécurisée à une base de données MySQL avec PDO
- Implémenter les 4 opérations CRUD en PHP
- Utiliser des requêtes préparées pour la sécurité
- Gérer les formulaires HTML avec PHP
- Structurer un projet web simple
crud/
├── connect.php # Configuration et connexion à la base de données
├── books.php # Affichage de la liste des livres (READ)
├── book.php # Affichage du détail d'un livre (READ)
├── members.php # Gestion complète des membres (CRUD)
└── README.md # Ce fichier
Le projet utilise une base de données MySQL nommée bibliotheque avec les tables suivantes :
id_livre(INT, PRIMARY KEY, AUTO_INCREMENT)titre(VARCHAR)annee_publication(YEAR)fk_id_auteur(INT, FOREIGN KEY)
id_auteur(INT, PRIMARY KEY, AUTO_INCREMENT)nom_auteur(VARCHAR)prenom_auteur(VARCHAR)
id_membre(INT, PRIMARY KEY, AUTO_INCREMENT)nom_membre(VARCHAR)prenom_membre(VARCHAR)email(VARCHAR)date_inscription(DATE)
Ce fichier établit la connexion à la base de données en utilisant PDO (PHP Data Objects).
<?php
// Configuration de la base de données
$host = 'localhost';
$dbname = 'bibliotheque';
$username = 'bibli2025';
$password = 'pass1234';
try {
// Création de la connexion PDO
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8",
$username,
$password,
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
} catch (PDOException $e) {
die("Erreur de connexion : ".$e->getMessage());
}Points clés :
- Utilisation de PDO pour la portabilité
- Gestion des erreurs avec try/catch
- Configuration du mode d'erreur en exception
- Définition du charset UTF-8
Ce fichier affiche la liste de tous les livres disponibles.
Fonctionnalités :
- Récupération de tous les livres avec une requête SELECT
- Affichage sous forme de liste avec liens vers le détail
- Utilisation de
fetchAll()pour récupérer tous les résultats
Concepts abordés :
- Requêtes préparées avec
prepare() - Exécution avec
execute() - Boucle
foreachpour l'affichage - Liens dynamiques avec paramètres GET
Affiche les détails d'un livre spécifique avec les informations de l'auteur.
Fonctionnalités :
- Validation des paramètres GET
- Jointure LEFT JOIN entre les tables livres et auteurs
- Affichage du détail d'un seul livre
Concepts abordés :
- Validation des entrées utilisateur (
is_numeric()) - Requêtes avec jointures
- Utilisation de
fetch()pour un seul résultat - Paramètres nommés dans les requêtes préparées
Ce fichier implémente toutes les opérations CRUD pour la gestion des membres.
// Formulaire d'ajout
<form action="#" method="post">
<label for="prenom">Prénom :</label>
<input type="text" name="prenom" id="prenom">
<!-- autres champs -->
<input type="submit" name="register" value="Ajouter l'utilisateur">
</form>
// Traitement PHP
$stmt = $pdo->prepare('INSERT INTO membres(nom_membre, prenom_membre, email, date_inscription) VALUES(:nom, :prenom, :email, :dateinscription)');
$stmt->execute(array(
'nom' => $nom,
'prenom' => $prenom,
'email' => $email,
'dateinscription' => date('Y-m-d')
));// Récupération de tous les membres
$stmt = $pdo->prepare('SELECT * FROM membres');
$stmt->execute();
$members = $stmt->fetchAll();
// Affichage en tableau HTML
foreach($members as $member): ?>
<tr>
<td><?=$member['prenom_membre'] ?></td>
<td><?=$member['nom_membre'] ?></td>
<!-- autres colonnes -->
</tr>
<?php endforeach;// Formulaire pré-rempli avec les données existantes
$stmt = $pdo->prepare('SELECT nom_membre, prenom_membre, email FROM membres WHERE id_membre=:id');
$stmt->execute(array('id' => $id));
$member = $stmt->fetch();
// Mise à jour
$stmt = $pdo->prepare('UPDATE membres SET nom_membre=:nom, prenom_membre=:prenom, email=:email WHERE id_membre=:id');
$stmt->execute(array(
'nom' => $nom,
'prenom' => $prenom,
'email' => $email,
'id' => $id
));// Confirmation avant suppression
if($_GET['confirmation'] === "ok"){
$stmt = $pdo->prepare('DELETE FROM membres WHERE id_membre=:id');
$stmt->execute(array('id' => $id));
if($stmt->rowCount() > 0){
header('Location: members.php');
}
}- Requêtes préparées : Protection contre les injections SQL
- Validation des entrées : Vérification des types et valeurs
- Échappement des sorties : Utilisation de
<?=pour l'affichage sécurisé - Gestion des erreurs : Try/catch et vérifications
- CSS intégré pour le styling des tableaux
- Navigation intuitive entre les modes (lecture, création, édition, suppression)
- Formulaires responsives avec validation côté serveur
- Messages de confirmation pour les actions critiques
members.php
├── Mode lecture (par défaut)
│ ├── Affichage de tous les membres
│ └── Liens vers création, édition, suppression
├── Mode création (?mode=creation)
│ ├── Formulaire d'ajout
│ └── Traitement POST
├── Mode édition (?mode=edition&id=X)
│ ├── Formulaire pré-rempli
│ └── Traitement POST pour mise à jour
└── Mode suppression (?mode=suppression&id=X)
├── Demande de confirmation
└── Suppression définitive
- Serveur web : WAMP, XAMPP, ou serveur Apache/Nginx
- PHP : Version 7.4 ou supérieure
- MySQL : Version 5.7 ou supérieure
- Base de données : Créer la base
bibliothequeavec les tables appropriées
Ce projet est conçu à des fins pédagogiques pour apprendre les bases du développement web avec PHP et MySQL.