Après include et require, une page se découpe en fichiers. Reste à recevoir ce que le visiteur saisit.
Inscription, connexion, commentaire : ça passe par un formulaire HTML. Le navigateur envoie les champs, PHP les retrouve dans $_GET ou $_POST. Comme dans la vidéo.
À quoi sert un formulaire
Sans formulaire, la page se lit. Personne ne s’inscrit, ne se connecte, ne laisse de commentaire. Le formulaire est le moyen d’envoyer des données à un script PHP.
On ne refait pas un cours d’HTML. La base du balisage, puis la récupération côté PHP. Tutoriel officiel : traiter des formulaires.
form, label, et les champs
Référence : élément form.
Une balise form. Dedans, un bloc par champ : un label et un contrôle. for sur le label reprend l’id du champ. Cliquer le libellé place le curseur dans le champ.
Trois champs, comme dans la démo :
- un
inputtexte, pour le nom ; - un
inputde typeemail; - un
textarea, pour le message.
select, cases à cocher, boutons radio : même principe. La suite ne dépend pas du type de champ.
<form>
<div>
<label for="name">Nom</label>
<input type="text" id="name" name="name">
</div>
<div>
<label for="email">E-mail</label>
<input type="email" id="email" name="email">
</div>
<div>
<label for="message">Message</label>
<textarea id="message" name="message"></textarea>
</div>
<button type="submit">Envoyer</button>
</form>
Un peu de CSS aligne les champs. Sans style, le formulaire reste moche. Le CSS ne change pas l’envoi.
Par défaut : GET, sur la même URL
Aucun method, aucun action. Le navigateur fait deux choses :
- il utilise le verbe GET ;
- il renvoie les données sur l’URL de la page en cours.
On saisit un nom, un e-mail, un message, on valide (Entrée ou le bouton). La même adresse est rappelée, avec une chaîne de requête :
http://localhost:8000/?name=test&email=test@test.fr&message=Bonjour
? ouvre les paramètres. Chaque paire s’écrit clé=valeur. & sépare les paires. Ce sont des paramètres d’URL, transportés par GET.
Le navigateur encode certains caractères (@ devient %40, un espace devient + ou %20). On y revient dans une vidéo suivante, avec les paramètres d’URL.
La clé vient de l’attribut name
Le formulaire construit un tableau clé / valeur. Il n’invente pas les clés : il reprend l’attribut name de chaque champ.
name, email et message sur les trois champs donnent trois clés : name, email, message.
L’id sert au label, au CSS, au JavaScript. PHP lit name. On remplace name="name" par name="identifiant-visiteur", on renvoie le formulaire : la clé dans l’URL devient identifiant-visiteur.
Lire l’URL avec $_GET
PHP crée des superglobales : des tableaux remplis automatiquement, disponibles dans tout le script. Il y en a plusieurs. Pour l’URL, c’est $_GET.
var_dump affiche le contenu d’une variable. exit arrête le script juste après, pour ne voir que ce dump.
<?php
var_dump($_GET);
exit;
Avec l’URL de l’exemple, l’affichage ressemble à ceci :
array(3) {
["name"]=>
string(4) "test"
["email"]=>
string(12) "test@test.fr"
["message"]=>
string(7) "Bonjour"
}
Une clé, toute seule :
<?php
echo $_GET['name'];
// test
Les données sont parties en GET, vers le même fichier. Le dump se place donc dans index.php, au-dessus du formulaire.
POST, et $_POST
Écrire method="get" ne change rien : c’est déjà le comportement par défaut. L’autre verbe utile ici : post.
<form method="post">
POST place les données dans le corps de la requête HTTP. L’URL reste nue : pas de ?name=test.
Ces champs ne sont plus dans $_GET. On lit $_POST.
<?php
var_dump($_POST);
exit;
Même tableau : name, email, message. Seul le transport change.
Après un envoi en POST, F5 redemande souvent au navigateur de renvoyer le formulaire. La page courante est le résultat d’un POST : recharger, c’est rejouer cette requête.
Quand GET, quand POST
Les deux verbes existent sur le web. Le choix dépend de ce qu’on envoie.
| Où vont les données | Visibles dans l’URL | Lecture PHP | |
|---|---|---|---|
| GET | chaîne de requête | oui | $_GET |
| POST | corps de la requête | non | $_POST |
Un long commentaire en GET produit une URL illisible, et elle finit par dépasser la longueur acceptée par le navigateur ou le serveur. Pour un message, un contact, une inscription : POST.
GET reste adapté pour demander une ressource, ou pour un paramètre court qu’on veut voir dans l’adresse (une recherche, un numéro de page). La playlist y revient.
Choisir la cible avec action
Sans action, l’envoi revient sur l’URL en cours. action désigne un autre fichier.
<form method="post" action="submit.php">
submit.php, à côté de index.php :
<?php
echo 'Formulaire bien reçu';
var_dump($_POST);
On valide. Le navigateur quitte la page du formulaire et ouvre submit.php. Le texte s’affiche, suivi du tableau.
En pratique, ce fichier vérifie que les données tiennent debout, les enregistre (en base, plus tard), puis renvoie vers une page du genre « merci, message bien reçu ».
À retenir
- Un formulaire envoie les champs. Les clés du tableau sont les attributs
name. - Défaut : GET, même URL. PHP range ça dans
$_GET. method="post": données dans la requête HTTP, lues dans$_POST. L’URL ne change pas.actionchoisit le fichier qui reçoit. Sansaction, c’est la page courante.$_GETet$_POSTsont des superglobales. PHP les remplit seul.
Démo vidéo
FAQ rapide (SEO & technique)
Où part le formulaire si action est absent ?
Sur la même URL. Voir l’élément form.
PHP lit id ou name ?
name. L’id relie le label au champ. La clé dans $_GET ou $_POST reprend name.
Différence entre $_GET et $_POST ?
$_GET contient les paramètres d’URL. $_POST contient le corps d’une requête POST. Voir les superglobales.
Pourquoi F5 veut renvoyer le formulaire ?
La page affichée vient d’un POST. Recharger rejoue cette requête.
Un long message en GET ?
L’URL devient illisible, puis trop longue. Pour un message, on envoie en POST.
Conclusion
Le HTML collecte les champs. method choisit GET ou POST. action choisit le fichier. PHP lit le résultat dans $_GET ou $_POST.
La vidéo suivante détaille les superglobales PHP et les paramètres d’URL. Abonnez-vous à la chaîne YouTube pour la suite.