Insérer un formulaire HTML dans une base de données MySQL : comment procéder ?
Les formulaires HTML permettent aux utilisateurs de saisir des données directement via un site Web, lesquelles peuvent ensuite être enregistrées dans une base de données. Ils servent ainsi d’interface entre le site Web et la base de données, afin que des saisies comme des noms, des adresses email ou des commentaires puissent être stockées et gérées de manière structurée. Ce guide explique comment enregistrer, à l’aide de PHP, des informations issues d’un formulaire HTML dans une base de données MySQL/MariaDB.
- Solutions flexibles, adaptées à vos besoins
- Architecture de niveau professionnel, gérée par des experts
- Hébergées en Europe, conformément aux normes de protection des données les plus strictes
Quels sont les prérequis ?
Pour enregistrer de manière fiable des données issues d’un formulaire HTML dans une base de données MySQL ou MariaDB, vous avez besoin d’un environnement répondant aux prérequis suivants :
- Serveur Web avec prise en charge de PHP : un serveur Web, comme Apache ou NGINX, avec PHP installé et activé, afin que les scripts côté serveur puissent traiter les informations transmises par le formulaire
- Connaissances de base en PHP et SQL : notions essentielles de PHP et de SQL pour établir la connexion entre le formulaire et la base de données, et insérer correctement les données
- Accès à la configuration du serveur Web : possibilité d’accéder au serveur Web pour exécuter des scripts PHP, créer des tables dans la base de données et, si nécessaire, configurer les autorisations
Apache, MySQL/MariaDB et PHP font partie d’une installation standard et fonctionnent généralement ensemble. Si votre serveur a été créé avec une installation minimale, vous devez installer et configurer Apache, MySQL/MariaDB et PHP avant de pouvoir continuer.
Comment insérer des informations issues d’un formulaire HTML dans MySQL/MariaDB ?
Pour ce tutoriel, nous créons un site Web fictif pour un restaurant. L’objectif est de permettre aux clients de laisser des avis directement via le site Web. Nous montrons comment traiter un formulaire HTML à l’aide d’un script PHP, puis enregistrer les données saisies dans une base de données MySQL ou MariaDB.
Étape 1 : créer la base de données
Dans un premier temps, nous créons une base de données afin que vous puissiez stocker toutes les informations issues du formulaire HTML. Pour cela, connectez-vous d’abord au client MySQL/MariaDB en ligne de commande :
mysql -u root -pbashCréez maintenant une base de données destinée aux avis des clients en utilisant la commande SQL CREATE DATABASE :
CREATE DATABASE avis_clients;bashPassez ensuite à cette base de données :
USE avis_clients;bashPour notre exemple, et afin de simplifier, nous ne créons qu’une seule table. Celle-ci comprend les champs suivants :
- Un champ ID : ce champ est défini avec
AUTO_INCREMENT. Ce paramètre garantit que la valeur est automatiquement augmentée de 1 à chaque nouvel enregistrement, ce qui permet d’attribuer un identifiant unique à chaque entrée. - Le nom de la personne ayant laissé l’avis : un champ texte d’une longueur maximale de 100 caractères est utilisé.
- Une note en étoiles : une valeur numérique comprise entre 1 et 5, définie avec le type de données
TINYINT. - Un commentaire : un champ texte destiné à stocker des informations complémentaires ou des commentaires sur l’évaluation. Défini en
VARCHAR(4000), il permet de contenir environ 500 mots.
Créez maintenant la table à l’aide de la commande CREATE TABLE :
CREATE TABLE avis_clients (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nom_du_client VARCHAR(100),
note_etoiles TINYINT,
commentaire VARCHAR(4000)
);bash
Étape 2 : créer un utilisateur
Pour des raisons de sécurité, il est recommandé de créer un utilisateur distinct pour chaque base de données, en particulier lorsque l’accès s’effectue depuis un site Web.
La commande MariaDB suivante crée un utilisateur nommé avis_clients_site avec le mot de passe JxSLRkdutW et lui accorde l’accès à la base de données contenant les avis des clients :
GRANT ALL ON avis_clients.* TO 'avis_clients_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';bashSi vous utilisez MySQL, la commande GRANT ... IDENTIFIED BY ... n’est plus recommandée dans les versions actuelles. À la place, il convient d’abord de créer l’utilisateur avec CREATE USER, puis d’utiliser GRANT :
CREATE USER 'avis_clients_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';
GRANT ALL ON avis_clients.* TO 'avis_clients_site'@'localhost';
FLUSH PRIVILEGES;bashÉtape 3 : créer le formulaire HTML pour le site Web
Dans l’étape suivante, nous créons le formulaire d’avis pour les évaluations des clients. Pour cela, créez un fichier nommé avis_clients.html dans votre espace Web et ouvrez-le pour le modifier. Pour créer par exemple le fichier dans /var/www/html avec l’éditeur de texte nano, utilisez la commande suivante :
sudo nano /var/www/html/avis_clients.htmlbashInsérez maintenant le contenu suivant dans ce fichier :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Avis sur notre restaurant</title>
</head>
<body>
<p>Votre avis compte : comment s’est passée votre expérience chez nous ?</p>
<form action="addreview.php" method="POST">
Votre nom : <input type="text" name="nom_du_client"><br><br>
Combien d’étoiles nous donneriez-vous ?
<select name="note_etoiles">
<option value="1">1 étoile</option>
<option value="2">2 étoiles</option>
<option value="3">3 étoiles</option>
<option value="4">4 étoiles</option>
<option value="5">5 étoiles</option>
</select><br><br>
Votre avis : <br>
<textarea name="commentaire" rows="10" cols="30"></textarea><br><br>
<input type="submit" value="Envoyer" name="submit">
</form>
</body>
</html>htmlVoici quelques points à prendre en compte concernant ce formulaire HTML de base :
- Ce formulaire utilise la méthode
POSTpour transmettre les données au script PHPaddreview.php. - Le nom de chaque champ de saisie est repris à l’étape suivante comme nom de variable dans le code PHP. En règle générale, il est pertinent d’utiliser les mêmes noms que ceux des champs de la table de base de données.
- Ne faites jamais confiance aux saisies des utilisateurs. Dans cet exemple, la note en étoiles doit être un nombre compris entre 1 et 5. Si les utilisateurs saisissaient eux-mêmes la note, des valeurs invalides pourraient être envoyées. Il est donc préférable de proposer des valeurs prédéfinies via un menu déroulant.
Étape 4 : créer le script PHP
Lors de la dernière étape, nous créons le script PHP qui insère les données du formulaire HTML dans la base de données. Pour cela, nous établissons une connexion à MySQL ou MariaDB, récupérons les saisies utilisateurs du formulaire et les enregistrons dans la table créée précédemment. Commencez par créer un fichier addreview.php sur votre espace Web et ouvrez-le pour modification. C’est ici que le code PHP sera placé. Pour créer le fichier dans /var/www/html à l’aide de nano, la commande est :
sudo nano /var/www/html/addreview.phpbashChaque script PHP doit commencer par la balise d’ouverture PHP :
<?phpphpAjoutez ensuite un bloc de connexion MySQL/MariaDB avec l’emplacement du serveur (localhost), le nom de la base de données, ainsi que le nom d’utilisateur de la base de données et le mot de passe.
$hostname = "localhost";
$username = "avis_clients_site";
$password = "JxSLRkdutW";
$db = "avis_clients";phpL’extrait de code suivant permet d’établir une connexion à la base de données à l’aide de la fonction mysqli_connect. De plus, le script affiche une erreur si cette connexion échoue :
$dbconnect = mysqli_connect($hostname, $username, $password, $db);
if (mysqli_connect_errno()) {
die("Échec de la connexion à la base de données : " . mysqli_connect_error());
}phpÀ l’étape suivante, nous récupérons les données saisies par l’utilisateur via le formulaire HTML et les enregistrons dans des variables PHP, afin de pouvoir ensuite les utiliser pour le traitement et l’insertion dans la base de données :
if (isset($_POST['submit'])) {
$nom_du_client = $_POST['nom_du_client'];
$note_etoiles = $_POST['note_etoiles'];
$commentaire = $_POST['commentaire'];phpEnsuite, les données saisies par l’utilisateur doivent être écrites dans la base de données. Pour cela, nous créons une requête SQL INSERT qui récupère les valeurs des variables PHP et les insère dans les champs correspondants de la table avis_clients. Afin d’éviter les injections SQL, nous utilisons ici des requêtes préparées :
$stmt = $dbconnect->prepare("INSERT INTO avis_clients (nom_du_client, note_etoiles, commentaire) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $nom_du_client, $note_etoiles, $commentaire);phpAjoutez une instruction PHP if-else qui affiche un message d’erreur en cas d’échec du processus. Si le processus réussit, remerciez l’utilisateur pour son avis :
if ($stmt->execute()) {
echo "Merci pour votre avis.";
} else {
die("Une erreur est survenue.");
}
$stmt->close();
}phpPour finir, fermez le bloc conditionnel et ajoutez une balise PHP de fermeture :
}
?>phpSi vous obtenez le message d’erreur « Échec de la connexion à la base de données : accès refusé pour l’utilisateur ‘avis_clients_site’@‘localhost’ (avec mot de passe : OUI) », vous pouvez vérifier les identifiants en vous connectant à MySQL/MariaDB depuis la ligne de commande avec la commande mysql -u avis_clients_site -p.
Étape 5 : tester le script
Pour tester le script, ouvrez avis_clients.html dans un navigateur, puis envoyez un avis d’exemple. Ensuite, connectez-vous à la base de données d’avis via le client MySQL/MariaDB en ligne de commande :
mysql -u root -p avis_clientsbashUtilisez SELECT * FROM avis_clients pour afficher l’intégralité du contenu de la table :
MariaDB [avis_clients]> SELECT * FROM avis_clients;
+----+--------------+--------------+-------------------------------+
| id | nom_du_client | note_etoiles | commentaire |
+----+--------------+--------------+-------------------------------+
| 1 | Ben | 5 | La calzone est délicieuse ! |
| 2 | Laura | 1 | La calzone n’est pas bonne. |
+----+--------------+--------------+-------------------------------+
2 rows in set (0.00 sec)bashLe script PHP complet est le suivant :
<?php
// Données de connexion à la base de données
$hostname = "localhost";
$username = "avis_clients_site";
$password = "JxSLRkdutW";
$db = "avis_clients";
// Établir la connexion à la base de données
$dbconnect = new mysqli($hostname, $username, $password, $db);
// Vérifier la connexion
if ($dbconnect->connect_error) {
die("Échec de la connexion à la base de données : " . $dbconnect->connect_error);
}
// Exécuter uniquement si le formulaire a été envoyé
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
// Valider les entrées (vérification minimale)
$nom_du_client = trim($_POST['nom_du_client'] ?? '');
$note_etoiles = intval($_POST['note_etoiles'] ?? 0);
$commentaire = trim($_POST['commentaire'] ?? '');
// Validation simple
if ($nom_du_client === '' || $note_etoiles < 1 || $note_etoiles > 5 || $commentaire === '') {
die("Veuillez remplir correctement tous les champs.");
}
// Créer une requête préparée
$stmt = $dbconnect->prepare("INSERT INTO avis_clients (nom_du_client, note_etoiles, commentaire) VALUES (?, ?, ?)");
if ($stmt === false) {
die("Erreur de base de données : " . $dbconnect->error);
}
$stmt->bind_param("sis", $nom_du_client, $note_etoiles, $commentaire);
// Exécuter la requête
if ($stmt->execute()) {
echo "Merci pour votre avis.";
} else {
die("Une erreur est survenue : " . $stmt->error);
}
$stmt->close();
}
// Fermer la connexion
$dbconnect->close();
?>php
