Après avoir appris à établir une connexion sécurisée entre PHP et MySQL, l’étape suivante la plus logique et la plus excitante est d’apprendre à écrire des données. En effet, l’insertion de données est au cœur de toute application web dynamique. Qu’il s’agisse d’un nouvel utilisateur qui s’inscrit, d’un client qui passe une commande ou d’un visiteur qui envoie un message via un formulaire de contact, le processus est fondamentalement le même. Vous capturez des informations et vous les stockez de manière permanente dans votre base de données. Cependant, cette opération est aussi l’une des plus sensibles en matière de sécurité. Par conséquent, il est absolument impératif d’utiliser les bonnes pratiques pour protéger votre site et les données de vos utilisateurs. Nous allons vous montrer comment le faire de manière sûre et efficace avec PDO.
Étape 1 : Le point de départ, un formulaire HTML sécurisé
Avant de pouvoir insérer des données, vous devez d’abord les collecter. La méthode la plus courante est un simple formulaire HTML. Pour cet exemple, imaginons que nous créons un formulaire d’inscription pour de nouveaux utilisateurs.
Créez un fichier, par exemple inscription.html, avec le code suivant :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Inscription</title>
</head>
<body>
<form action="traitement.php" method="POST">
<label for="nom">Nom :</label>
<input type="text" id="nom" name="nom" required>
<br>
<label for="email">Email :</label>
<input type="email" id="email" name="email" required>
<br>
<button type="submit">S'inscrire</button>
</form>
</body>
</html>
Deux points sont essentiels ici. Premièrement, l’attribut action="traitement.php" indique que les données du formulaire seront envoyées à ce script PHP pour être traitées. Deuxièmement, l’attribut method="POST" est utilisé. Il est crucial d’utiliser POST pour envoyer des données sensibles, car elles voyagent dans le corps de la requête HTTP et non dans l’URL, contrairement à la méthode GET.
Étape 2 : Le script PHP de traitement et d’insertion
C’est ici que la magie opère. Le fichier traitement.php va recevoir les données, se connecter à la base de données, et insérer les informations de manière sécurisée. Ce script se décompose en plusieurs sous-étapes logiques.
Valider et nettoyer les données entrantes
La première règle de la sécurité web est de ne jamais faire confiance aux données de l’utilisateur. Vous devez toujours valider et nettoyer ce que vous recevez. PHP fournit des outils pour cela.
- Vérifier que les données existent : Utilisez
isset()ou!empty()pour vous assurer que les champs ne sont pas vides. - Valider le format : Utilisez
filter_var()pour vérifier si l’email a un format valide, par exemple. - Nettoyer pour l’affichage : Bien que ce ne soit pas pour l’insertion, si vous devez réafficher ces données, utilisez
htmlspecialchars()pour vous protéger des attaques XSS.
Se connecter à la base de données avec PDO
Comme nous l’avons vu précédemment, nous utilisons un bloc try...catch pour établir une connexion sécurisée avec notre base de données. Ces informations de connexion devraient idéalement provenir d’un fichier de configuration. Pour cet exemple, nous les incluons directement, mais n’oubliez pas les bonnes pratiques. Un hébergement web comme celui de Tswan Hosting vous fournit une interface claire pour gérer vos bases de données et vos utilisateurs.
Préparer et exécuter la requête d’insertion
C’est l’étape la plus critique. Pour insérer des données, nous utilisons une requête SQL INSERT INTO. Pour éviter les injections SQL, il est obligatoire d’utiliser une requête préparée.
Voici le script traitement.php complet et commenté :
<?php
// 1. Validation et nettoyage des données
if (!isset($_POST['nom']) || !isset($_POST['email']) || empty($_POST['nom']) || empty($_POST['email'])) {
die("Erreur : Tous les champs sont requis.");
}
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
die("Erreur : Le format de l'email est invalide.");
}
$nom = $_POST['nom'];
$email = $_POST['email'];
// 2. Connexion à la base de données
$host = 'localhost';
$dbname = 'votre_base_de_donnees';
$username = 'votre_utilisateur';
$password = 'votre_mot_de_passe';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 3. Préparation et exécution de la requête d'insertion
// La requête SQL avec des marqueurs nommés (:nom, :email)
$sql = "INSERT INTO utilisateurs (nom, email) VALUES (:nom, :email)";
// Préparer la requête
$stmt = $pdo->prepare($sql);
// Lier les valeurs aux marqueurs et exécuter la requête
$stmt->execute([
'nom' => $nom,
'email' => $email
]);
echo "Inscription réussie !";
} catch (PDOException $e) {
// En cas d'erreur (par exemple, email déjà existant si la colonne est UNIQUE)
// En production, loggez l'erreur et affichez un message générique.
die("Erreur lors de l'inscription : " . $e->getMessage());
}
?>

Le point clé ici est l’utilisation de marqueurs nommés (:nom, :email) dans la requête SQL. Nous ne mettons jamais les variables $nom et $email directement dans la chaîne $sql. Au lieu de cela, nous passons un tableau associatif à la méthode execute(). PDO se charge alors de lier les valeurs de manière sécurisée, rendant les injections SQL impossibles via cette méthode.
En conclusion, l’insertion de données avec PHP et MySQL est une opération puissante, mais qui exige de la rigueur. En validant systématiquement les entrées utilisateur et en utilisant exclusivement les requêtes préparées de PDO, vous construisez des applications non seulement fonctionnelles, mais aussi robustes et sécurisées. C’est en respectant ces principes fondamentaux que des équipes comme celles de Tswan Softwares développent des solutions fiables pour leurs clients.
