Traitez les formulaires comme un professionnel : bonne méthode HTTP, validation stricte des entrées et réaffichage sécurisé.
Ouvrir cette leçon dans KodokonUn formulaire est le premier point de contact entre vos utilisateurs et votre code PHP. La méthode get place les données dans l'URL (?q=pizza) : parfaite pour une recherche ou un filtre, car la page peut être mise en favori et partagée. La méthode post transporte les données dans le corps de la requête : c'est la méthode obligatoire dès que la requête modifie quelque chose (création de compte, commande, suppression) ou transporte des données sensibles. PHP range les valeurs reçues dans les superglobales $_GET et $_POST.
<form action="search.php" method="get">
<label for="q">Recherche</label>
<input id="q" name="q" type="text">
<button type="submit">Chercher</button>
</form>
<?php
$query = trim($_GET['q'] ?? '');
if ($query !== '') {
echo "<p>Vous cherchez : " .
htmlspecialchars($query, ENT_QUOTES) . "</p>";
}
?>Règle professionnelle numéro un : ne faites jamais confiance aux données reçues. Un utilisateur peut envoyer n'importe quoi, y compris des valeurs forgées hors de votre formulaire. La fonction filter_input() lit et valide une valeur en une seule étape : elle renvoie la valeur validée, false si elle est invalide, et null si le champ est absent - trois cas à distinguer dans vos messages d'erreur.
<?php
declare(strict_types=1);
$errors = [];
$email = filter_input(
INPUT_POST,
'email',
FILTER_VALIDATE_EMAIL
);
$age = filter_input(
INPUT_POST,
'age',
FILTER_VALIDATE_INT,
['options' => ['min_range' => 18, 'max_range' => 120]]
);
$name = trim((string) ($_POST['name'] ?? ''));
if ($name === '' || mb_strlen($name) > 50) {
$errors[] = "Nom requis (50 caractères max).";
}
if (!is_string($email)) {
$errors[] = "Adresse e-mail invalide.";
}
if (!is_int($age)) {
$errors[] = "Âge invalide (entre 18 et 120).";
}
if ($errors === []) {
echo "Inscription valide.";
}Quand la validation échoue, ne renvoyez pas un formulaire vide : réaffichez les valeurs saisies (formulaire « collant ») et les messages d'erreur à côté des champs concernés. Toute valeur réaffichée doit passer par htmlspecialchars() : c'est elle qui neutralise les balises et empêche l'injection de scripts.
<?php
$name = trim($_POST['name'] ?? '');
$hasError = isset($_POST['name']) && $name === '';
$safeName = htmlspecialchars($name, ENT_QUOTES);
?>
<form method="post" action="">
<label for="name">Votre nom</label>
<input id="name" name="name"
value="<?= $safeName ?>">
<?php if ($hasError): ?>
<p>Le nom est obligatoire.</p>
<?php endif; ?>
<button type="submit">Envoyer</button>
</form>