📘 Chapitre – Exécuter des opérations CRUD en POO

1. 🎯 Objectif pédagogique

Savoir structurer un code PHP orienté objet pour exécuter des opérations CRUD (Create, Read, Update, Delete) de manière claire et réutilisable.

2. 📚 Concepts abordés

  • Classe et méthode pour les opérations CRUD
  • Instanciation d’objets et gestion des données
  • Connexion PDO encapsulée dans une classe
  • Bonnes pratiques de séparation logique (fichier Database.php + User.php)
  • Exécution de méthodes : create(), read(), update(), delete()

3. 🧠 Explication théorique

En POO, les opérations CRUD sont regroupées dans des méthodes d’une classe. Par exemple, une classe User peut contenir :

  • create() pour ajouter un utilisateur,
  • read() pour afficher les informations,
  • update() pour les modifier,
  • delete() pour les supprimer.

Cette approche rend le code plus modulaire et facile à maintenir.

4. 🛠 Tutoriel pratique

Résumé du travail : Créer une classe User avec des méthodes CRUD utilisant PDO.

Arborescence projet :

projet_poo_crud/
 ├── Database.php
 ├── User.php
 └── index.php

Étape 1 : Classe de connexion (Database.php)

<?php
class Database {
    private $host = "localhost";
    private $dbname = "blogdb";
    private $username = "root";
    private $password = "";
    public $conn;

    public function getConnection() {
        $this->conn = null;
        try {
            $this->conn = new PDO("mysql:host={$this->host};dbname={$this->dbname};charset=utf8", 
                                  $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo "Erreur de connexion : " . $e->getMessage();
        }
        return $this->conn;
    }
}

Étape 2 : Classe User avec CRUD (User.php)

<?php
class User {
    private $conn;
    private $table = "users";

    public $id;
    public $nom;
    public $email;

    public function __construct($db) {
        $this->conn = $db;
    }

    // CREATE
    public function create() {
        $sql = "INSERT INTO {$this->table} (nom, email) VALUES (:nom, :email)";
        $stmt = $this->conn->prepare($sql);
        return $stmt->execute(['nom' => $this->nom, 'email' => $this->email]);
    }

    // READ
    public function read() {
        $sql = "SELECT * FROM {$this->table}";
        $stmt = $this->conn->query($sql);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    // UPDATE
    public function update() {
        $sql = "UPDATE {$this->table} SET nom=:nom, email=:email WHERE id=:id";
        $stmt = $this->conn->prepare($sql);
        return $stmt->execute(['nom' => $this->nom, 'email' => $this->email, 'id' => $this->id]);
    }

    // DELETE
    public function delete() {
        $sql = "DELETE FROM {$this->table} WHERE id=:id";
        $stmt = $this->conn->prepare($sql);
        return $stmt->execute(['id' => $this->id]);
    }
}

Étape 3 : Utilisation dans index.php

<?php
require 'Database.php';
require 'User.php';

// Connexion
$database = new Database();
$db = $database->getConnection();

// Créer un utilisateur
$user = new User($db);
$user->nom = "Alice";
$user->email = "alice@test.com";
$user->create();

// Lire les utilisateurs
$liste = $user->read();
foreach ($liste as $u) {
    echo $u['nom'] . " - " . $u['email'] . "<br>";
}

5. 🧾 Résumé et points-clés

  • Les classes permettent d’organiser les opérations CRUD en méthodes réutilisables.
  • PDO est intégré directement dans la classe pour sécuriser les requêtes.
  • Les fichiers sont séparés pour une meilleure maintenance (connexion et logique métier).
  • Cette structure est une première étape vers le MVC.