Numérique et sciences informatiques (spécialité) · Première
Formulaires : méthodes GET et POST, cours de Première NSI
Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur
L'essentiel
- Un formulaire s'écrit avec la balise
<form>; ses attributsmethod(GET ou POST) etaction(cible de l'envoi) décident de ce qui part et où. 2 - Avec GET, les données voyagent en clair dans l'adresse affichée par le navigateur. 1
- Avec POST, les données sont placées dans le corps de la requête : elles sont moins visibles. 1
- Côté serveur, un script PHP lit les données dans
$_GETou$_POST, selon la méthode choisie. 2 - Réflexe de choix : GET pour une requête qu'on peut partager ou retrouver dans l'adresse, POST pour envoyer une ressource ou remplir un formulaire.
Pourquoi des formulaires ?
Jusqu'ici, tu as vu qu'une page web est décrite en HTML, mise en forme en CSS, et rendue vivante par des événements JavaScript. Tu as aussi vu que le navigateur (le client) dialogue avec un serveur grâce au protocole HTTP. Il manque un maillon : comment l'utilisateur envoie-t-il de l'information au serveur ? Quand tu t'inscris sur un site, que tu lances une recherche ou que tu réponds à un questionnaire, c'est presque toujours un formulaire qui s'en charge.
Dans ce cours, tu vas comprendre ce qui se passe entre le moment où tu cliques sur « Envoyer » et celui où le serveur reçoit tes données. Tu verras les deux méthodes HTTP utilisées pour cela, GET et POST, leurs différences visibles, et comment un programme côté serveur récupère ce qui a été saisi.
Rappel : les méthodes HTTP
Quand le navigateur contacte un serveur, il envoie une requête HTTP. Cette requête commence par indiquer une méthode, c'est-à-dire le type d'action demandée. Le protocole en propose plusieurs : GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE et PATCH. 1
Pour les formulaires, seules deux méthodes comptent : GET et POST. 2 Les autres existent, mais un formulaire HTML ne les utilise pas pour soumettre ses données.
Pour situer les choses, voici ce que dit le programme sur deux d'entre elles. La méthode HEAD permet d'obtenir seulement l'en-tête de la réponse, sans le contenu de la page. La méthode POST permet d'envoyer une ressource au serveur et elle est souvent employée quand on remplit un formulaire. 1 GET, elle, sert d'abord à demander une ressource : c'est celle que ton navigateur utilise quand tu tapes une adresse ou que tu cliques sur un lien.
La balise form et ses attributs
Un formulaire est contenu dans l'élément HTML <form>. Cet élément précise deux choses : l'URL vers laquelle les données saisies doivent être envoyées, et la méthode de soumission, GET ou POST. 2 Le programme formule la même idée : dans la balise, on indique la méthode HTTP utilisée et le lien qui sera activé lors de l'envoi. 1
Ces deux informations se placent dans des attributs :
action: l'adresse de la ressource qui va traiter les données (souvent un script côté serveur) ;method: la méthode HTTP,getoupost.
- SaisieL'utilisateur remplit les champs du formulaire.
- EncodageChaque name est associé à sa valeur.
- RequêteGET : dans l'adresse. POST : dans le corps.
- TraitementLe script lit $_GET ou $_POST.
La méthode GET : des données dans l'adresse
Avec la méthode GET, les données du formulaire sont transmises en clair dans la barre d'adresse du navigateur. 1 Cela signifie que tu peux les lire en regardant l'URL après l'envoi.
Prenons le formulaire précédent. Si l'utilisateur saisit Ada dans le champ prenom, l'adresse affichée après l'envoi ressemble à ceci :
traitement.php?prenom=Ada
Après l'adresse du script, on trouve un signe ?, puis des paires nom=valeur. Avec plusieurs champs, les paires sont séparées par le caractère &, par exemple traitement.php?prenom=Ada&classe=1ere. Ce découpage est une illustration : l'essentiel à retenir est que le nom du champ et sa valeur apparaissent dans l'adresse.
La méthode POST : des données dans le corps de la requête
Avec la méthode POST, les données ne sont pas collées à l'adresse. Elles sont transmises dans le corps de la requête, ce qui les rend moins visibles. 1 L'adresse affichée par le navigateur reste simplement traitement.php, sans ? ni paires nom=valeur.
Une requête HTTP se compose d'une ligne de départ, d'en-têtes, puis éventuellement d'un corps. Avec GET, tout ce qu'il faut tient dans la première ligne (l'adresse). Avec POST, on place le contenu à envoyer dans ce corps. On peut se représenter la requête comme une enveloppe : GET écrit le message sur l'enveloppe, POST le glisse à l'intérieur.
Comment les données sont encodées
Les données saisies ne partent pas telles quelles : elles sont encodées. Les noms et les valeurs des éléments de formulaire sont encodés puis envoyés au serveur dans un message de requête HTTP, avec GET ou POST. 2
L'encodage par défaut porte le nom de type MIME application/x-www-form-urlencoded. Il repose sur de très anciennes règles de codage en pourcentage des URI, avec quelques modifications : les retours à la ligne sont normalisés et les espaces sont remplacés par le signe + au lieu de %20. 2 Un autre encodage existe, multipart/form-data, qui est courant dans certains cas, notamment pour l'envoi de fichiers. 2
Côté serveur : récupérer les données avec PHP
Envoyer des données ne sert à rien si personne ne les lit. Côté serveur, c'est un programme qui s'en charge. Le programme de NSI prend l'exemple de PHP : l'URL du script PHP est indiquée dans l'attribut action de la balise form. 2
Le fichier PHP visé accède ensuite aux données transmises par le formulaire grâce aux variables $_POST ou $_GET, selon la valeur de l'attribut method du formulaire. 2 Autrement dit :
Attribut method |
Variable PHP à lire |
|---|---|
get |
$_GET |
post |
$_POST |
Le programme précise que, si la méthode d'envoi est POST, PHP peut récupérer le texte saisi et l'afficher. 1
Choisir entre GET et POST
Les différences vues jusqu'ici permettent de décider. Deux critères suffisent à ce niveau : la visibilité des données et la nature de l'action.
| Critère | GET | POST |
|---|---|---|
| Emplacement des données | Barre d'adresse | Corps de la requête |
| Visibilité | En clair dans l'adresse | Moins visibles |
| Variable PHP | $_GET | $_POST |
| Usage typique | Demander une réponse | Envoyer une ressource |
Méthode de résolution d'un exercice type
Au bac ou en contrôle, une question sur les formulaires suit presque toujours le même schéma : on te donne un extrait HTML, un extrait PHP, ou une adresse affichée, et on te demande d'expliquer ou de compléter.
Erreurs fréquentes et points de vigilance
Exercices corrigés
Exercice 1 Lire un formulaire
On donne le formulaire suivant :
<form action="login.php" method="post">
<input type="text" name="identifiant">
<input type="password" name="code">
<input type="submit" value="Entrer">
</form>
- Quelle est la méthode utilisée ?
- Qu'affiche la barre d'adresse après l'envoi, hors nom de domaine ?
- Quelles variables PHP faut-il lire pour récupérer les valeurs ?
Indice 1
Regarde l'attribut method.
Indice 2
Avec POST, il n'y a pas de paires nom=valeur dans l'adresse.
Voir la correction pas à pas
La balise
<form>contientmethod="post": la méthode est POST.Avec POST, les données sont dans le corps de la requête et non dans l'adresse. L'adresse affichée est donc simplement
login.php.Le script lit
$_POST['identifiant']et$_POST['code'], car les clés correspondent aux attributsname.
On repère toujours method et name en premier : ils donnent la méthode et les clés à lire.
Exercice 2 Reconstituer l'adresse
Un formulaire utilise action="resultat.php" et method="get". Il contient deux champs : ville (l'utilisateur écrit Le Mans) et age (il écrit 16).
Écris l'adresse obtenue après l'envoi, hors nom de domaine, puis dis comment PHP lit la valeur de ville.
Indice 1
Les paires nom=valeur sont séparées par &.
Indice 2
Un espace est remplacé par + dans l'encodage par défaut.
Voir la correction pas à pas
La méthode est GET : les données sont placées dans l'adresse, après un
?.La valeur
Le Manscontient un espace, remplacé par+:Le+Mans.L'adresse est
resultat.php?ville=Le+Mans&age=16.Le script lit
$_GET['ville']et$_GET['age'], car la méthode est GET.
Pour GET, on construit l'adresse avec ?, nom=valeur, & et +.
Exercice 3 Corriger un script PHP
Un élève écrit ce formulaire :
<form action="accueil.php" method="post">
<input type="text" name="prenom">
<input type="text" name="nom">
<input type="submit" value="OK">
</form>
et ce script accueil.php :
<?php echo "Salut " . $_GET['prenom'] . " " . $_GET['nom']; ?>
Les noms n'apparaissent jamais. Explique pourquoi et propose deux corrections possibles.
Indice 1
Compare la méthode du formulaire à la variable lue.
Indice 2
Tu peux modifier le HTML ou le PHP.
Voir la correction pas à pas
Le formulaire utilise POST : les données sont dans le corps de la requête.
Le script lit
$_GETet non$_POST, qui contient les données : la variable ne correspond pas à la méthode.Correction 1 : remplacer
$_GETpar$_POSTdans le script.Correction 2 : remplacer
method="post"parmethod="get"dans le formulaire, sachant que les valeurs seront alors visibles dans l'adresse.
La méthode du formulaire et la variable PHP lue doivent toujours correspondre.
Exercice 4 Choisir la méthode adaptée
Pour chaque cas, indique GET ou POST et justifie en une phrase :
- un formulaire de recherche de livres dans une bibliothèque en ligne ;
- un formulaire d'inscription avec mot de passe ;
- un filtre de produits dont on veut pouvoir envoyer l'adresse à un ami.
Indice 1
Demande-toi si les données doivent apparaître dans l'adresse.
Indice 2
Demande-toi si on veut partager le résultat.
Voir la correction pas à pas
Recherche de livres : GET, car la requête ne fait que demander une réponse et l'adresse peut être partagée.
Inscription avec mot de passe : POST, car les données ne doivent pas apparaître dans la barre d'adresse.
Filtre partageable : GET, car l'adresse contient les critères et permet à l'ami de retrouver exactement les mêmes résultats.
GET quand l'adresse doit porter la demande, POST quand les données ne doivent pas y figurer.
Exercice 5 Décoder une adresse
Après l'envoi d'un formulaire, l'adresse est :
commande.php?produit=carte+mere&quantite=2&livraison=express
- Quelle méthode a été utilisée ?
- Combien de champs le formulaire a-t-il transmis ?
- Quelle est la valeur du champ
produit? - Écris le code PHP qui affiche la valeur de
quantite.
Indice 1
Compte les signes & et ajoute 1.
Indice 2
Le + remplace l'espace.
Voir la correction pas à pas
Les données sont dans l'adresse : la méthode est GET.
Il y a deux signes
&, donc trois paires : le formulaire a transmis trois champs.La valeur de
produitestcarte mere, avec un espace à la place du+.Le code est
<?php echo $_GET['quantite']; ?>, car la méthode est GET et non$_POST.
Une adresse GET se lit paire par paire, en remplaçant + par un espace.
Quiz
6 questions · correction immédiate · ton score reste sur ton appareil.
-
Avec GET, les données sont transmises en clair dans la barre d'adresse. 1 Le corps de la requête est l'emplacement de POST : c'est la confusion tentante, mais elle est fausse pour GET.
-
Le script lit
$_POSTou$_GETselon la valeur de l'attributmethod. 2 L'autre variable est tentante parce qu'on la rencontre souvent, mais elle correspond à la méthode GET. -
La balise permet de spécifier l'URL de destination des données et la méthode de soumission. 2 La méthode est portée par
method, pas paraction: c'est l'erreur courante. -
Faux : avec POST, les données sont dans le corps de la requête, donc moins visibles. 1 L'erreur consiste à inverser les deux méthodes.
-
L'encodage par défaut remplace les espaces par
+au lieu de%20. 2%20est tentant car il appartient au codage général des URI, mais le formulaire utilise une modification de ces règles.
Les questions qu'on se pose
Quelle est la différence principale entre GET et POST pour un formulaire ?
POST est-il sécurisé ?
Le programme dit que POST rend les données moins visibles, pas qu'il les protège. 1 Retiens la formule exacte : avec POST, les données ne figurent pas dans l'adresse. Ne confonds pas ce constat avec une garantie de confidentialité.
Comment PHP récupère-t-il ce que l'utilisateur a saisi ?
L'adresse du script est indiquée dans l'attribut action. Le script lit ensuite les données avec $_GET ou $_POST, selon la valeur de method. 2 La clé utilisée est le name du champ.
Pourquoi mon champ n'arrive-t-il pas au serveur ?
Vérifie trois points : le champ a-t-il un attribut name, la méthode du formulaire correspond-elle à la variable lue ($_GET ou $_POST), 2 et l'attribut action pointe-t-il vers le bon script ? Ce sont les trois causes les plus fréquentes.
Sources
- Document pédagogique Éduscol NSI — Programme complet, Éduscol — Ministère de l'Éducation nationale. Consulté le 6 novembre 2026.
- Formulaire HTML, Wikipédia. Consulté le 6 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.