Quand tu développes un site web, tu dois souvent enregistrer et retrouver des informations. Pour faire cela de manière efficace et organisée, on utilise une base de données. En PHP, on peut communiquer avec une base de données MySQL pour ajouter, lire, modifier ou supprimer des informations (CRUD). Dans ce cours, tu vas apprendre pas à pas comment connecter ton code PHP à une base de données, comment envoyer des requêtes, et comment afficher ou enregistrer des résultats — tout cela en suivant les bonnes pratiques du métier.
À la fin de cette leçon, tu seras capable de :
Tu dois d'abord avoir :
CREATE DATABASE cours_php;
USE cours_php;
CREATE TABLE utilisateurs (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100),
email VARCHAR(100)
);
Cette table utilisateurs va stocker un id, un nom, et un email.
config/db.php)<?php
$host = 'localhost'; // Nom du serveur MySQL (localhost si c'est sur ton PC)
$dbname = 'cours_php'; // Nom de ta base de données
$username = 'root'; // Nom d'utilisateur MySQL par défaut (root)
$password = ''; // Mot de passe (souvent vide en local)
try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8",
$username,
$password
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connexion échouée : " . $e->getMessage());
}
?>
try/catch pour gérer les erreurs (par exemple : mauvais mot de passe).charset=utf8 permet de gérer les accents et caractères spéciaux.setAttribute(...ERRMODE_EXCEPTION) : si une requête échoue, une erreur claire est générée.liste_utilisateurs.php)<?php
require_once 'config/db.php'; // On inclut le fichier de connexion
$sql = "SELECT * FROM utilisateurs"; // Requête SQL : on récupère toutes les lignes de la table
$stmt = $pdo->query($sql); // Exécution de la requête
$utilisateurs = $stmt->fetchAll(PDO::FETCH_ASSOC); // On récupère les résultats sous forme de tableau associatif
?>
<ul>
<?php foreach ($utilisateurs as $utilisateur): ?>
<li><?= htmlspecialchars($utilisateur['nom']) ?> (<?= htmlspecialchars($utilisateur['email']) ?>)</li>
<?php endforeach; ?>
</ul>
require_once évite les erreurs si le fichier est déjà inclus ailleurs.$pdo->query(...) : exécute une requête en lecture seule.fetchAll(PDO::FETCH_ASSOC) : transforme les résultats en tableau avec les noms des colonnes comme clés.foreach permet d’afficher dynamiquement tous les utilisateurs.htmlspecialchars() est essentiel pour empêcher le HTML ou JavaScript malicieux (protection XSS).<form method="post" action="ajouter_utilisateur.php">
<input type="text" name="nom" placeholder="Nom" required>
<input type="email" name="email" placeholder="Email" required>
<button type="submit">Ajouter</button>
</form>
<?php
require_once 'config/db.php';
if (!empty($_POST['nom']) && !empty($_POST['email'])) {
$sql = "INSERT INTO utilisateurs (nom, email) VALUES (:nom, :email)";
$stmt = $pdo->prepare($sql); // Préparation de la requête avec des "placeholders"
$stmt->execute([
':nom' => $_POST['nom'],
':email' => $_POST['email']
]);
echo "Utilisateur ajouté !";
}
?>
method="post" : on ne montre pas les données dans l’URL.required : évite les envois vides.prepare(...) + execute(...) permet d’éviter les injections SQL (ex. : si quelqu’un met ' OR 1=1).:nom et :email sont des paramètres nommés qui seront automatiquement sécurisés.| Bonne pratique | Pourquoi ? |
|---|---|
Centraliser la connexion (db.php) |
Gain de temps, moins d'erreurs, facile à modifier |
Requêtes préparées (prepare + execute) |
Sécurise les données, empêche les attaques |
htmlspecialchars() |
Évite les failles XSS (scripts malicieux dans les champs) |
| Ne pas afficher d'erreur brute à l'utilisateur | Protéger les informations du serveur |
Tester $_POST ou $_GET avec empty() |
Évite les erreurs et le traitement d'informations vides |
htmlspecialchars