Tuto récupérer des données d'un formulaire
3.1 Tuto mini-site : formulaire de contact avec validation serveur
Dans ce tutoriel, nous allons créer une petite page de formulaire de contact avec les champs suivants : - Prénom - Nom - Email - Message
Ce formulaire sera envoyé avec la méthode POST vers un serveur Express.
Objectif :
- Le serveur vérifie que tous les champs sont remplis
- Si c’est le cas ➜ redirection vers une page de confirmation
- Sinon ➜ redirection vers le formulaire avec un paramètre d’erreur dans l’URL
- Le message d’erreur est affiché dynamiquement via JavaScript
Vérification des champs côté client
Notez qu'il est également possible de vérifier que les champs soient bien complétés du côté client avec la balise required
(voir tuto HTML sur les formulaires).
Ici, pour le but de l'exercice, nous le vérifions uniquement du côté serveur, mais il est généralement bon de le vérifier des deux côtés.
Structure du projet
mini-site/
├── public/
| ├── css/
| | └── style.css
| ├── js/
| | └── script.js
│ ├── contact.html
│ └── confirmation.html
└── serveur.js
La partie HTML (contact.html et confirmation.html)
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Contact</title>
<link rel="stylesheet" href="css/style.css">
<script src="js/script.js" defer></script>
</head>
<body>
<main>
<h1>Formulaire de contact</h1>
<p id="erreur" class="erreur-message"></p>
<form action="/contact" method="POST">
<label for="prenom">Prénom :</label>
<input type="text" id="prenom" name="prenom"><br>
<label for="nom">Nom :</label>
<input type="text" id="nom" name="nom"><br>
<label for="email">Email :</label>
<input type="email" id="email" name="email"><br>
<label for="message">Message :</label><br>
<textarea id="message" name="message" rows="5"></textarea><br>
<button type="submit">Envoyer</button>
</form>
</main>
</body>
</html>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Confirmation</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<main>
<h1>Merci !</h1>
<p>Votre message a bien été envoyé.</p>
<a href="/contact.html">Retour au formulaire</a>
</main>
</body>
</html>
Le CSS (style.css)
body {
font-family: sans-serif;
background-color: #f4f4f4;
padding: 20px;
}
main {
max-width: 500px;
margin: auto;
background-color: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
label {
display: block;
margin-top: 15px;
}
input, textarea {
width: 100%;
padding: 8px;
margin-top: 5px;
}
button {
margin-top: 15px;
padding: 10px 15px;
background-color: #336699;
color: white;
border: none;
border-radius: 4px;
}
.erreur-message {
color: red;
font-weight: bold;
}
Le script frontend (script.js)
const params = new URLSearchParams(window.location.search);
const erreur = params.get("erreur");
if (erreur === "1") {
const messageErreur = document.getElementById("erreur");
messageErreur.textContent = "Tous les champs doivent être remplis.";
}
Ce script regarde si un paramètre erreur est présent dans l'URL, si c'est le cas, il sélectionne la balise "erreur"
du code HTML et y ajoute un texte.
Le script backend (server.js)
const express = require("express");
const path = require("path");
const app = express();
const PORT = 3000;
// Middleware pour lire les données de formulaire
app.use(express.urlencoded({ extended: true }));
// Sert les fichiers statiques (HTML, CSS, JS)
app.use(express.static("public"));
// Pour envoyerr sur la page de contact (plutôt que index.html)
app.get('/', (req, res) => {
res.sendFile(__dirname + '/public/contact.html');
});
app.post("/contact", (req, res) => {
const { prenom, nom, email, message } = req.body;
if (!prenom || !nom || !email || !message) {
// Redirection avec un paramètre dans l'URL en cas d'erreur
return res.redirect("/contact.html?erreur=1");
}
// Si tout est rempli, redirection vers une page de confirmation
res.redirect("/confirmation.html");
});
app.listen(PORT, () => {
console.log(`Serveur démarré sur http://localhost:${PORT}`);
});
"erreur"
dans l'URL.
Ce projet montre un cycle complet : formulaire → validation → redirection