Traitement
Vérification soumission
Avant de pouvoir accèder aux données entrées par l'utilisateur, il faut s'assurer que le formulaire ait été soumis.
Pour ce faire, on peut utiliser la superglobale $_SERVER pour vérifier si la méthode de requête est POST. Voici un exemple de code en PHP :
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Le formulaire a été soumis
// Vous pouvez maintenant accéder aux données du formulaire
}
Tip: Si l'action est GET, vous devez utiliser GET 😉.
Vous pouvez également tester la présence de la clé et la valeur associée du bouton de soumission. Par exemple :
<?php
if (isset($_POST['btn_submit'])) {
// Le formulaire a été soumis via le bouton 'submit'
// Vous pouvez maintenant accéder aux données du formulaire
}
isset() vérifie si une variable est définie et n’est pas nulle
Tip: Dans cet exemple, le formulaire doit avoir son action en
POSTet posséder un bouton de soumission nommébtn_submit😉.
Accèder aux données
Rappelez-vous, les données sont envoyées sous forme de tableau associatif : les clés sont les name des éléments et les entrées ou les choix des utilisateurs sont les value.
Code
<?php
var_dump($_POST);
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Création de votre compte</h1>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="nom">Votre nom</label>
<input type="text" name="nom" id="nom" placeholder="Entrez votre nom" value="">
<label for="pnom">Votre prénom</label>
<input type="text" name="pnom" id="pnom" placeholder="Entrez votre prénom" value="">
<label for="age">Votre âge</label>
<input type="number" name="age" id="age" placeholder="Entrez votre âge" value="">
<input type="submit" value="Envoyer" name="btn_submit">
</form>
</body>
</html>
Observez le contenu de la variable $_POST avant la soumission du formulaire et observez son contenu après soumission.

Vous pouvez accéder aux données du formulaire en utilisant les superglobales $_POST ou $_GET selon la méthode de soumission du formulaire. Par exemple, pour accéder à une donnée envoyée via POST :
Nous allons voir comment récupérer les données en fonctions des inputs utilisés. Gardez à l'esprit qu'il faudra ajouter des vérifications avant de traiter les données.
Input
Testez ce code. Que constatez-vous ?
Encodez les données suivantes :
Nom : <script>alert('Votre site est cracké !');</script>
Prenom : <h1>Merci pour cette faille de sécurité</h1>
Age : 33
Que constatez-vous ?
Modifiez le code comme suit :
<?php
$nom = (isset($_POST['nom'])) ? trim(htmlspecialchars($_POST['nom'])) : '';
$pnom = (isset($_POST['pnom'])) ? trim(htmlspecialchars($_POST['pnom'])) : '';
$age = (isset($_POST['age'])) ? trim(htmlspecialchars($_POST['age'])) : '';
if (empty($nom) || empty($pnom) || empty($age)) {
$message = "Veuillez remplir tous les champs !";
} else {
$message = "Bonjour $pnom $nom<br>Vous avez $age ans";
}
Refaites les mêmes tests. Que constatez-vous ?
Modifiez le code comme suit :
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nom = isset($_POST['nom']) ? trim(htmlspecialchars($_POST['nom'])) : '';
$pnom = isset($_POST['pnom']) ? trim(htmlspecialchars($_POST['pnom'])) : '';
$age = isset($_POST['age']) ? filter_var(trim($_POST['age']), FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]) : false;
if (empty($nom) || empty($pnom) || $age === false) {
$message = "Veuillez remplir tous les champs et entrer un âge valide (> 0) !";
} else {
$message = "Bonjour $pnom $nom ! <br> vous avez $age ans.";
}
}
Explication portion code
<?php
age = isset($_POST['age']) ? filter_var(trim($_POST['age']), FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]) : false;
Il s'agit d'une condition ternaire.
isset($_POST['age']) -> vérifie que la clé age existe et n'est pas null dans le tableau $_POST
Si oui :
-
La fonction
filter_var()est utilisée pour valider la valeur en utilisant le filtreFILTER_VALIDATE_INT. Celui-ci permet de vérifier que la chaîne représente un entier. -
Le paramètre
['options' => ['min_range' => 1]]spécifie une option de validation : l'entier doit être supérieur ou égal à 1. -
Si la validation est réussie, la fonction
filter_var()renvoie la valeur qui sera assignée à la variableage -
Si la validation échoue (par exemple, si la valeur n'est pas un entier ou est inférieure à 1), filter_var() renvoie false.
Notez que la fonction trim() est utilisée pour supprimer les espaces avant et après la donnée.
Si non :
falsesera assigné à la variableage
Astuce
On pourrait également appliquer la fonction trim() sur toutes les entrées du formulaire en utilisant :
$postData = array_map('trim', $_POST);
Conservation d'état
Au rechargement d'une page PHP, les valeurs des variables PHP sont perdues et le script est exécuté depuis le début comme s'il n'avait jamais été exécuté.
Ceci n'est pas dû à PHP mais au protocole HTTP qui est un protocole sans état (stateless).
Lorsque vous avez testé le formulaire précédent, à chaque test vous avez dû réécrire toutes les infos dans les différents champs. Enervant, non ?
Il est impératif de conserver les valeurs dans les champs des formulaires (Formulaire avec conservation d'état).
Formulaire avec conservation d'état
Exemple : Voir l'exemple sur github >>