Les for­mu­laires HTML per­met­tent aux uti­li­sa­teurs de saisir des données di­rec­te­ment via un site Web, les­quelles peuvent ensuite être en­re­gis­tré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 com­men­taires puissent être stockées et gérées de manière struc­tu­rée. Ce guide explique comment en­re­gis­trer, à l’aide de PHP, des in­for­ma­tions issues d’un for­mu­laire HTML dans une base de données MySQL/MariaDB.

Bases de données managées
Des bases de données gérées et sûres
  • Solutions flexibles, adaptées à vos besoins
  • Ar­chi­tec­ture de niveau pro­fes­sion­nel, gérée par des experts
  • Hébergées en Europe, con­for­mé­ment aux normes de pro­tec­tion des données les plus strictes

Quels sont les prérequis ?

Pour en­re­gis­trer de manière fiable des données issues d’un for­mu­laire HTML dans une base de données MySQL ou MariaDB, vous avez besoin d’un en­vi­ron­ne­ment 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 in­for­ma­tions trans­mises par le for­mu­laire
  • Con­nais­sances de base en PHP et SQL : notions es­sen­tielles de PHP et de SQL pour établir la connexion entre le for­mu­laire et la base de données, et insérer cor­rec­te­ment les données
  • Accès à la con­fi­gu­ra­tion du serveur Web : pos­si­bi­lité 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é­ces­saire, con­fi­gu­rer les au­to­ri­sa­tions
Note

Apache, MySQL/MariaDB et PHP font partie d’une ins­tal­la­tion standard et fonc­tion­nent gé­né­ra­le­ment ensemble. Si votre serveur a été créé avec une ins­tal­la­tion minimale, vous devez installer et con­fi­gu­rer Apache, MySQL/MariaDB et PHP avant de pouvoir continuer.

Comment insérer des in­for­ma­tions issues d’un for­mu­laire HTML dans MySQL/MariaDB ?

Pour ce tutoriel, nous créons un site Web fictif pour un res­tau­rant. L’objectif est de permettre aux clients de laisser des avis di­rec­te­ment via le site Web. Nous montrons comment traiter un for­mu­laire HTML à l’aide d’un script PHP, puis en­re­gis­trer 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 in­for­ma­tions issues du for­mu­laire HTML. Pour cela, connectez-vous d’abord au client MySQL/MariaDB en ligne de commande :

mysql -u root -p
bash

Créez main­te­nant une base de données destinée aux avis des clients en utilisant la commande SQL CREATE DATABASE :

CREATE DATABASE avis_clients;
bash

Passez ensuite à cette base de données :

USE avis_clients;
bash

Pour notre exemple, et afin de sim­pli­fier, 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 au­to­ma­ti­que­ment augmentée de 1 à chaque nouvel en­re­gis­tre­ment, ce qui permet d’attribuer un iden­ti­fiant unique à chaque entrée.
  • Le nom de la personne ayant laissé l’avis : un champ texte d’une longueur maximale de 100 ca­rac­tè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 com­men­taire : un champ texte destiné à stocker des in­for­ma­tions com­plé­men­taires ou des com­men­taires sur l’éva­lua­tion. Défini en VARCHAR(4000), il permet de contenir environ 500 mots.

Créez main­te­nant 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 uti­li­sa­teur

Pour des raisons de sécurité, il est re­com­mandé de créer un uti­li­sa­teur distinct pour chaque base de données, en par­ti­cu­lier lorsque l’accès s’effectue depuis un site Web.

La commande MariaDB suivante crée un uti­li­sa­teur 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';
bash

Si vous utilisez MySQL, la commande GRANT ... IDENTIFIED BY ... n’est plus re­com­man­dée dans les versions actuelles. À la place, il convient d’abord de créer l’uti­li­sa­teur 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 for­mu­laire HTML pour le site Web

Dans l’étape suivante, nous créons le for­mu­laire d’avis pour les éva­lua­tions 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.html
bash

Insérez main­te­nant 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>
html

Voici quelques points à prendre en compte con­cer­nant ce for­mu­laire HTML de base :

  • Ce for­mu­laire utilise la méthode POST pour trans­mettre les données au script PHP addreview.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 uti­li­sa­teurs. Dans cet exemple, la note en étoiles doit être un nombre compris entre 1 et 5. Si les uti­li­sa­teurs sai­sis­saient eux-mêmes la note, des valeurs invalides pour­raient être envoyées. Il est donc pré­fé­rable de proposer des valeurs pré­dé­fi­nies 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 for­mu­laire HTML dans la base de données. Pour cela, nous éta­blis­sons une connexion à MySQL ou MariaDB, ré­cu­pé­rons les saisies uti­li­sa­teurs du for­mu­laire et les en­re­gis­trons dans la table créée pré­cé­dem­ment. Commencez par créer un fichier addreview.php sur votre espace Web et ouvrez-le pour mo­di­fi­ca­tion. 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.php
bash

Chaque script PHP doit commencer par la balise d’ouverture PHP :

<?php
php

Ajoutez ensuite un bloc de connexion MySQL/MariaDB avec l’em­pla­ce­ment du serveur (localhost), le nom de la base de données, ainsi que le nom d’uti­li­sa­teur de la base de données et le mot de passe.

$hostname = "localhost";
$username = "avis_clients_site";
$password = "JxSLRkdutW";
$db = "avis_clients";
php

L’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é­cu­pé­rons les données saisies par l’uti­li­sa­teur via le for­mu­laire HTML et les en­re­gis­trons dans des variables PHP, afin de pouvoir ensuite les utiliser pour le trai­te­ment 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'];
php

Ensuite, les données saisies par l’uti­li­sa­teur 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 cor­res­pon­dants de la table avis_clients. Afin d’éviter les in­jec­tions 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);
php

Ajoutez une ins­truc­tion PHP if-else qui affiche un message d’erreur en cas d’échec du processus. Si le processus réussit, remerciez l’uti­li­sa­teur pour son avis :

if ($stmt->execute()) {
echo "Merci pour votre avis.";
} else {
die("Une erreur est survenue.");
}
$stmt->close();
}
php

Pour finir, fermez le bloc con­di­tion­nel et ajoutez une balise PHP de fermeture :

}
?>
php
Note

Si vous obtenez le message d’erreur « Échec de la connexion à la base de données : accès refusé pour l’uti­li­sa­teur ‘avis_clients_site’@‘localhost’ (avec mot de passe : OUI) », vous pouvez vérifier les iden­ti­fiants en vous con­nec­tant à 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 na­vi­ga­teur, 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_clients
bash

Utilisez SELECT * FROM avis_clients pour afficher l’in­té­gra­lité 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)
bash

Le 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
Aller au menu principal