# 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.

## 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

Note 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](https://www.ionos.fr/digitalguide/sites-internet/creation-de-sites-internet/creation-dun-site-internet-pour-restaurant/). L’objectif est de permettre aux clients de laisser des avis directement via le site Web. Nous montrons comment traiter un [formulaire HTML](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/html-forms/) à 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 :

```bash
mysql -u root -p
```

Créez maintenant une [base de données](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/base-de-donnees/) destinée aux avis des clients en utilisant la [commande SQL](https://www.ionos.fr/digitalguide/serveur/configuration/commandes-sql/) [CREATE DATABASE](https://www.ionos.fr/digitalguide/serveur/configuration/sql-create-database/) :

```bash
CREATE DATABASE avis_clients;
```

Passez ensuite à cette base de données :

```bash
USE avis_clients;
```

Pour 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](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/mariadb-create-table/) :

```bash
CREATE TABLE avis_clients (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nom_du_client VARCHAR(100),
note_etoiles TINYINT,
commentaire VARCHAR(4000)
);
```

### É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](https://www.ionos.fr/digitalguide/serveur/know-how/mariadb-cest-quoi/) 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 :

```bash
GRANT ALL ON avis_clients.* TO 'avis_clients_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';
```

Si vous utilisez [MySQL](https://www.ionos.fr/digitalguide/serveur/know-how/quest-ce-que-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 :

```bash
CREATE USER 'avis_clients_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';
GRANT ALL ON avis_clients.* TO 'avis_clients_site'@'localhost';
FLUSH PRIVILEGES;
```

### É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 :

```bash
sudo nano /var/www/html/avis_clients.html
```

Insérez maintenant le contenu suivant dans ce fichier :

```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>
```

Voici quelques points à prendre en compte concernant ce formulaire HTML de base :

- Ce formulaire utilise la méthode `POST` pour transmettre 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 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 :

```bash
sudo nano /var/www/html/addreview.php
```

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

```php
<?php
```

Ajoutez 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.

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

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 :

```php
$dbconnect = mysqli_connect($hostname, $username, $password, $db);
if (mysqli_connect_errno()) {
die("Échec de la connexion à la base de données : " . mysqli_connect_error());
}
```

À 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 :

```php
if (isset($_POST['submit'])) {
$nom_du_client = $_POST['nom_du_client'];
$note_etoiles = $_POST['note_etoiles'];
$commentaire = $_POST['commentaire'];
```

Ensuite, 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](https://www.ionos.fr/digitalguide/serveur/securite/injection-sql-bases-et-mesures-pour-se-proteger/), nous utilisons ici des [requêtes préparées](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/prepared-statements-phpmysql/) :

```php
$stmt = $dbconnect->prepare("INSERT INTO avis_clients (nom_du_client, note_etoiles, commentaire) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $nom_du_client, $note_etoiles, $commentaire);
```

Ajoutez une [instruction PHP if-else](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/fonction-php-ifelse/) qui affiche un message d’erreur en cas d’échec du processus. Si le processus réussit, remerciez l’utilisateur pour son avis :

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

Pour finir, fermez le bloc conditionnel 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’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 :

```bash
mysql -u root -p avis_clients
```

Utilisez SELECT * FROM avis_clients pour afficher l’intégralité du contenu de la table :

```bash
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)
```

Le script PHP complet est le suivant :

```php
<?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();
?>
```


This is a markdown version of: [https://www.ionos.fr/digitalguide/sites-internet/developpement-web/integrer-un-formulaire-html-dans-une-database-mysql-mariadb/](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/integrer-un-formulaire-html-dans-une-database-mysql-mariadb/) for AI/LLM consumption.