Les formulaires en PHP
Objectifs pédagogiques
- Comprendre le fonctionnement d’un formulaire HTML.
- Différencier les méthodes d’envoi
GETetPOST. - Utiliser les superglobales
$_GET,$_POST,$_FILES. - Valider et sécuriser les données issues d’un formulaire.
Création d’un formulaire
Un formulaire HTML se définit à l’aide de la balise <form> :
html
<form method="post" action="traitement.php">
<input type="text" name="nom" />
<input type="submit" value="Envoyer" />
</form>Les deux attributs principaux sont :
method: la méthode HTTP utilisée pour envoyer les données (getoupost).action: la page qui traitera les données.
Méthodes d’envoi
GET: les données sont envoyées dans l’URL (?champ=valeur), visibles par l’utilisateur.POST: les données sont envoyées dans le corps de la requête, plus adapté aux données sensibles ou longues.
Récupération des données
Les données sont disponibles via les superglobales PHP :
php
// Si méthode="post"
echo $_POST['nom'];
// Si méthode="get"
echo $_GET['nom'];Zones de texte et retours à la ligne
html
<form method="post" action="traitement.php">
<textarea name="text"></textarea>
<input type="submit" value="Envoyer" />
</form>Utiliser nl2br() pour conserver les sauts de ligne :
php
echo nl2br($_POST['text']);Cases à cocher
php
if (isset($_POST['case'])) {
echo "La case est cochée";
}Validation et sécurisation des champs
Les données issues d’un formulaire doivent toujours être validées côté serveur.
Exemple de validation d’un email
php
$email = $_POST['email'] ?? '';
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Adresse email invalide";
}Autres exemples courants
Nombre entier
php
$age = $_POST['age'] ?? '';
if (!filter_var($age, FILTER_VALIDATE_INT)) {
echo "L'âge doit être un nombre entier";
}URL
php
$url = $_POST['site'] ?? '';
if (!filter_var($url, FILTER_VALIDATE_URL)) {
echo "URL invalide";
}Nettoyage d'une chaîne de caractères
php
$comment = $_POST['comment'] ?? '';
$comment = filter_var($comment, FILTER_SANITIZE_SPECIAL_CHARS);
htmlspecialcharsest aussi souvent utilisé pour l’échappement HTML lors de l’affichage.
Aller plus loin
Listes à sélection multiple
html
<select name="selection[]" multiple>
<option value="1">Un</option>
<option value="2">Deux</option>
</select>php
foreach ($_POST['selection'] as $valeur) {
// Traitement
}Envoyer un fichier
html
<form method="post" action="traitement.php" enctype="multipart/form-data">
<input type="file" name="fichier"/>
<input type="submit" value="Envoyer" />
</form>php
if (isset($_FILES['fichier'])) {
$dir = 'upload/';
$file = basename($_FILES['fichier']['name']);
if (move_uploaded_file($_FILES['fichier']['tmp_name'], $dir . $file)) {
echo "Upload effectué avec succès !";
} else {
echo "Échec de l'upload";
}
}À retenir
- Toujours valider les données reçues, quelle que soit la méthode.
- Ne jamais faire confiance à l’utilisateur.
- Penser à l’encodage (
htmlspecialchars) et aux injections (filter_*). - Pour séparer les responsabilités, placer le formulaire dans une page, et le traitement dans une autre.