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
- Vérifier la méthode HTTP — s'assurer que c'est un POST
- Nettoyer les données —
trim()enlève les espaces inutiles - Valider — champs requis, format email, valeurs numériques
- Insérer avec une requête préparée — jamais de concaténation
- 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)