Skip to content

Les formulaires en PHP

Objectifs pédagogiques

  • Comprendre le fonctionnement d’un formulaire HTML.
  • Différencier les méthodes d’envoi GET et POST.
  • 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 (get ou post).
  • 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);

htmlspecialchars est 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.