Leçon 5 / 8
Leçon 05 · Partie 2 — Modifier les données

INSERT — Ajouter des données

La requête INSERT INTO

INSERT INTO ajoute une nouvelle ligne dans une table.

-- Insérer un utilisateur
INSERT INTO utilisateurs (nom, email, age)
VALUES ('Alice', 'alice@exemple.com', 28);

Pas besoin de préciser l'id. MySQL l'incrémente tout seul grâce à AUTO_INCREMENT.

INSERT avec PDO (requête préparée)


require_once 'connexion.php';

$stmt = $pdo->prepare(
    "INSERT INTO utilisateurs (nom, email, age)
     VALUES (:nom, :email, :age)"
);

$stmt->execute([
    ':nom'   => 'Bob',
    ':email' => 'bob@exemple.com',
    ':age'   => 32,
]);

// Récupérer l'ID du nouvel enregistrement
$nouvel_id = $pdo->lastInsertId();
echo "Utilisateur créé avec l'ID : {$nouvel_id}";

Traiter un formulaire d'inscription

Cas classique : un formulaire HTML envoie des données. PHP les reçoit et les insère en BDD.

<!-- formulaire.html -->
<form method="post" action="ajouter.php">
  <input type="text"  name="nom"   placeholder="Nom"   required/>
  <input type="email" name="email" placeholder="Email" required/>
  <input type="number" name="age" placeholder="Âge"/>
  <button type="submit">S'inscrire</button>
</form>
// ajouter.php

require_once 'connexion.php';

// 1. Vérifier que le formulaire a été soumis en POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: formulaire.html');
    exit;
}

// 2. Récupérer et nettoyer les données
$nom   = trim($_POST['nom']);
$email = trim($_POST['email']);
$age   = (int) ($_POST['age'] ?? 0);

// 3. Validation basique
if (empty($nom) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    die("Données invalides.");
}

// 4. Insérer en BDD
try {
    $stmt = $pdo->prepare(
        "INSERT INTO utilisateurs (nom, email, age) VALUES (:nom, :email, :age)"
    );
    $stmt->execute([':nom' => $nom, ':email' => $email, ':age' => $age]);
    header('Location: index.php?message=ok');
} catch (PDOException $e) {
    // Email déjà utilisé (UNIQUE) ou autre erreur
    echo "Erreur : " . $e->getMessage();
}

Les étapes indispensables

  1. Vérifier la méthode HTTP — s'assurer que c'est un POST
  2. Nettoyer les donnéestrim() enlève les espaces inutiles
  3. Valider — champs requis, format email, valeurs numériques
  4. Insérer avec une requête préparée — jamais de concaténation
  5. Rediriger après succès — évite de soumettre le formulaire deux fois

Pattern PRG (Post-Redirect-Get) : après un INSERT, redirige avec header('Location: ...'). Sinon, si l'utilisateur recharge la page, le formulaire est soumis une deuxième fois.

// À retenir
  • INSERT INTO table (col1, col2) VALUES (:p1, :p2) — syntaxe INSERT
  • Toujours requête préparée pour les données utilisateur
  • Vérifier $_SERVER['REQUEST_METHOD'] === 'POST' avant de traiter
  • trim() pour nettoyer, filter_var() pour valider le format
  • $pdo->lastInsertId() récupère l'ID auto-généré
  • Rediriger après succès (pattern PRG)