L'attribut action d'un formulaire HTML indique au navigateur où envoyer les données du formulaire quand l'utilisateur clique sur soumettre. C'est l'URL qui reçoit la soumission, et sans elle, ton formulaire n'a nulle part où aller. Comprendre comment ça fonctionne, c'est la différence entre un formulaire de contact qui livre vraiment les messages et un formulaire qui ne fait rien en silence.
Table des matières
- À quoi sert vraiment l'attribut action
- Ce qu'on met dans l'URL du formulaire
- Pourquoi la méthode est tout aussi importante que l'action
- Le problème des sites statiques
- Utiliser un service d'endpoint de formulaire
- L'attribut formaction sur les boutons
- Ce qui se passe après la soumission
- Erreurs courantes
À quoi sert vraiment l'attribut action
Quand quelqu'un remplit un formulaire et clique sur soumettre, le navigateur rassemble toutes les valeurs des champs dans une requête et l'envoie à l'URL spécifiée dans l'attribut
action
. Cette URL s'appelle l'endpoint du formulaire. Le serveur qui se trouve à cet endpoint reçoit les données, les traite, et généralement renvoie une réponse.
Voici l'exemple le plus simple possible :
<form action="https://example.com/submit" method="POST">
<input name="name" type="text"/>
<button type="submit">Send</button>
</form>
Quand l'utilisateur clique sur "Envoyer", le navigateur envoie une requête POST à
https://example.com/submit
avec les données du formulaire jointes. Le serveur à cette adresse gère le reste.
Si tu omets l'attribut
action
complètement, le navigateur soumet le formulaire à l'URL de la page actuelle. C'est parfois utile pour les apps côté serveur, mais dans la plupart des cas, ça signifie que tes données ne vont nulle part d'utile.
Ce qu'on met dans l'URL du formulaire
L'URL du formulaire peut être :
-
Une URL absolue
comme
https://api.example.com/contact. Ça envoie les données vers un serveur ou un service complètement différent. -
Une URL relative
comme
/submitousubmit.php. Le navigateur la résout par rapport au domaine de la page actuelle. -
Une chaîne vide
(
action=""). Soumet vers la page actuelle, pareil que si tu omettais l'attribut.
Pour la plupart des formulaires de contact réels, tu vas utiliser une URL absolue qui pointe soit vers ton propre script côté serveur (un fichier PHP, un endpoint Node.js, etc.), soit vers un service de backend de formulaire tiers. L'essentiel, c'est que quelque chose doit tourner à cette URL pour recevoir et traiter la requête.
Pourquoi la méthode est tout aussi importante que l'action
L'attribut
method
fonctionne avec
action
pour définir comment les données sont envoyées. Il y a deux options :
| Méthode | Comment les données sont envoyées | Utilisation typique |
|---|---|---|
GET
|
Ajoutées à l'URL comme paramètres de requête (
?name=Alice&message=Hi
)
|
Formulaires de recherche, filtres, requêtes mémorisables |
POST
|
Envoyées dans le corps de la requête, pas visibles dans l'URL | Formulaires de contact, formulaires de connexion, toute donnée sensible ou longue |
Pour les formulaires de contact, utilise toujours
method="POST"
. Les requêtes GET exposent les valeurs des champs dans la barre d'adresse du navigateur, se retrouvent stockées dans l'historique du navigateur, et ont des limites de longueur qui vont tronquer les messages plus longs. POST n'a aucun de ces problèmes.
Par défaut, les formulaires HTML envoient les données sous la forme
application/x-www-form-urlencoded
, qui encode les noms et valeurs des champs en une chaîne structurée. La plupart des backends et services de formulaires acceptent ce format sans configuration.
Le problème des sites statiques
C'est ici que les développeurs se heurtent à un mur. Si ton site est purement statique (des fichiers HTML simples hébergés sur GitHub Pages, Cloudflare Pages, ou des hosts similaires), il n'y a pas de code côté serveur qui tourne sur ton domaine. Tu ne peux pas juste pointer l'action de ton formulaire vers un script PHP parce qu'il n'y a pas de runtime PHP pour l'exécuter.
Ça signifie que ton URL d'action de formulaire doit pointer ailleurs complètement. Tes options sont :
- Écrire et héberger ton propre backend API (Node.js, Python, etc.) sur un serveur séparé
- Utiliser une fonction serverless (AWS Lambda, Cloudflare Workers)
- Utiliser un service de backend de formulaire qui te donne un endpoint de formulaire HTML prêt à l'emploi
La troisième option est la plus rapide pour la plupart des projets. Tu obtiens une URL à mettre directement dans ton attribut
action
et les soumissions commencent à arriver dans ta boîte de réception sans aucun code backend. Si tu veux savoir comment ça se compare à écrire ton propre gestionnaire côté serveur, la
comparaison PHP vs formulaires serverless
couvre clairement les compromis.
Utiliser un service d'endpoint de formulaire
Un service d'endpoint de formulaire comme Sendform.net fonctionne en te donnant une URL unique qui agit comme l'attribut action de ton formulaire. Tu pointes ton formulaire là-bas, et le service transfère les soumissions à ton email. Pas de backend nécessaire.
Voici à quoi ça ressemble en pratique :
<form action="https://sendform.net/en/!a8Kz3mXq12" method="POST">
<input name="email" placeholder="[email protected]" required="" type="email"/>
<textarea name="message" placeholder="Tell us more" required=""></textarea>
<button type="submit">Send</button>
</form>
La mise en place est simple :
- Connecte-toi à Sendform.net et crée un formulaire pour obtenir ton URL d'endpoint personnelle.
- Ouvre l'onglet Intégration et copie l'endpoint.
-
Colle-le comme attribut
actionde ton formulaire avecmethod="POST". -
Assure-toi que ton formulaire a un
<input/>avecname="email"et un<textarea> </textarea>avecname="message". - Déploie ton site. Les soumissions arrivent dans ta boîte de réception des notifications.
email
et
message
doivent correspondre exactement. Si ton champ s'appelle
Email
(E majuscule) ou
msg
, la soumission échouera la validation. Les noms de champs sont sensibles à la casse.
Sendform a aussi un Snippet Builder dans l'onglet Intégration. Sélectionne "HTML" dans le sélecteur de framework, définis optionnellement une URL de redirection pour une page de remerciement personnalisée, et active un champ honeypot pour la protection contre le spam basique. Ça génère le snippet de formulaire complet prêt à copier.
L'attribut formaction sur les boutons
Il y a un cousin moins connu de l'attribut action du formulaire :
formaction
sur les boutons de soumission individuels. Ça remplace l'attribut
action
du formulaire pour ce bouton spécifique seulement.
<form action="/default-endpoint" method="POST">
<input name="query" type="text">
<button type="submit">Save</button>
<button formaction="/preview-endpoint" type="submit">Preview</button>
</input></form>
Cliquer sur "Enregistrer" envoie les données à
/default-endpoint
. Cliquer sur "Aperçu" envoie les mêmes données à
/preview-endpoint
à la place. L'attribut HTML
formaction
est supporté dans tous les navigateurs modernes et est défini dans la
norme HTML vivante WHATWG.
C'est utile pour les formulaires multi-actions (enregistrer vs publier, enregistrer vs supprimer) sans avoir besoin de JavaScript pour changer l'action du formulaire dynamiquement.
Ce qui se passe après la soumission
Après que le navigateur envoie la requête à l'URL d'action du formulaire, la réponse du serveur détermine ce que l'utilisateur voit ensuite :
- Réponse de redirection (HTTP 302/303) : Le serveur envoie le navigateur vers une nouvelle URL. Motif courant pour afficher une page "merci".
- Réponse HTML : Le serveur renvoie une page directement, qui remplace la page actuelle dans le navigateur.
- Pas de redirection configurée : Avec Sendform, si tu n'as pas défini d'URL de redirection, le service renvoie sa propre page de confirmation.
Si tu veux garder l'utilisateur sur ton propre site après la soumission, configure une URL de redirection pointant vers ta propre page de remerciement. Dans Sendform, tu définis ça dans le Snippet Builder ou les paramètres du formulaire. Le navigateur atterrira sur ta page au lieu de l'écran de confirmation par défaut du service.
Pour les développeurs qui veulent gérer les soumissions sans rechargement de page complet, tu peux intercepter la soumission du formulaire avec JavaScript, envoyer les données via
fetch()
, et mettre à jour l'interface toi-même. Dans ce cas, l'attribut
action
sert toujours comme fallback utile pour les utilisateurs avec JavaScript désactivé.
Erreurs courantes
- Utiliser GET au lieu de POST pour les formulaires de contact. Les valeurs des champs incluant les adresses email se retrouvent dans les logs du serveur et l'historique du navigateur.
- Pointer l'action vers un fichier statique. Les fichiers HTML et CSS ne peuvent pas traiter les soumissions de formulaire. L'URL d'action a besoin d'un serveur ou d'un service derrière elle.
- Oublier l'attribut action complètement. Le formulaire soumet vers la page actuelle, ce qui généralement le recharge simplement sans effet.
-
Noms de champs qui ne correspondent pas.
Si l'endpoint attend
name="email"et ton input aname="Email", la soumission échoue la validation silencieusement côté serveur. - Utiliser une URL relative pour un endpoint cross-origin. Si ton backend de formulaire se trouve sur un domaine différent, tu as besoin de l'URL absolue complète incluant le protocole.
Pour les utilisateurs de Webflow spécifiquement, la mise en place de l'action du formulaire a quelques bizarreries spécifiques à la plateforme qui valent le coup de connaître. Le guide du formulaire de contact Webflow couvre comment pointer un formulaire Webflow vers un endpoint externe sans écrire de code côté serveur.
Obtiens une vraie URL d'action de formulaire HTML en moins d'une minute
Sendform.net te donne un endpoint de formulaire HTML prêt à l'emploi que tu peux mettre directement dans l'attribut action de ton formulaire. Pas de backend, pas de JavaScript nécessaire. Pointe ton formulaire de site statique vers ton endpoint personnel et les soumissions arrivent dans ta boîte de réception instantanément.
Crée Ton Endpoint de Formulaire →
Si tu omets l'attribut
action
ou que tu le définis sur une chaîne vide, le navigateur soumet le formulaire à l'URL de la page actuelle. Sur une page HTML statique sans code côté serveur, ça recharge généralement juste la page et jette les données complètement. Rien n'est sauvegardé ou envoyé par email. Pointe toujours
action
vers un vrai endpoint qui peut traiter la soumission.
Oui. Tu peux intercepter l'événement de soumission du formulaire avec JavaScript, appeler
event.preventDefault()
, collecter les valeurs des champs en utilisant
FormData
, et les envoyer à l'URL d'action via
fetch()
. Ça te permet d'afficher un message de succès sans naviguer ailleurs. L'attribut
action
sert toujours comme fallback fiable pour les utilisateurs avec JavaScript désactivé, donc c'est une bonne pratique de le garder défini correctement de toute façon.
Non. L'URL d'action du formulaire peut pointer vers n'importe quel domaine. Une soumission de formulaire traditionnelle (pas avec fetch) envoie la requête directement depuis le navigateur et n'est pas restreinte par la politique de même-origine qui s'applique aux requêtes JavaScript fetch. C'est exactement comment fonctionnent les services de backend de formulaire : ton formulaire se trouve sur ton domaine, mais l'URL d'action pointe vers le domaine du service, et le navigateur envoie les données là-bas sans aucun problème CORS.
L'attribut
action
sur l'élément
<form>
</form>
définit l'URL de soumission par défaut pour le formulaire entier. L'attribut
formaction
sur un
<button type="submit">
</button>
ou un
<input type="submit"/>
individuel remplace ce défaut pour ce bouton spécifique seulement. Quand l'utilisateur clique sur un bouton avec
formaction
, le formulaire soumet à l'URL de ce bouton au lieu du défaut du formulaire. Tous les autres boutons utilisent toujours l'attribut
action
au niveau du formulaire.
La plupart des services de backend de formulaire, incluant Sendform.net, te permettent de configurer une URL de redirection dans tes paramètres de formulaire. Après une soumission réussie, le service envoie une réponse de redirection HTTP pointant le navigateur vers ton URL choisie, comme
/thank-you.html
. Sans une redirection configurée, le service renvoie sa propre page de confirmation par défaut. Définis la redirection dans le Snippet Builder ou le tableau de bord des paramètres du formulaire avant de déployer ton formulaire.
Ça arrive généralement quand l'action du formulaire pointe vers un serveur local (comme
http://localhost:3000/submit
) qui n'existe pas en production. Après le déploiement, cette adresse est injoignable. Assure-toi que ton attribut action utilise une URL absolue pointant vers ton endpoint en direct, pas une adresse localhost. Vérifie aussi que toute configuration spécifique à l'environnement (clés API, URLs d'endpoint) est correctement définie sur ta plateforme d'hébergement.