PHP: Formulaires

Le HTML permet de créer des formulaires. Cependant, pour récupérer et manipuler les données envoyées, un langage “serveur” (PHP, Java, C#…) est nécessaire.

Voici un exemple simple de formulaire traité avec PHP pour vous aider à démarrer.

Le formulaire ci-dessous permet à un utilisateur de saisir son nom et son âge, puis affiche ces informations après la soumission.

Formulaire HTML

<!-- index.html -->
<form action="traitement.php" method="post">

    <label for="monNom">Nom :</label> 
    <input type="text" id="monNom" name="nom" required> 

    <label for="monAge">Nom :</label> 
    <input type="number" id="monAge" name="age" required>    

    <button type="submit">Envoyer</button>
</form>

Dans le code précédent :

Script PHP (traitement.php)

<?php
// traitement.php
// Si la méthode HTTP de la requête est "POST"
// if (!empty($_POST)) { // variante
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Récupérer les données du formulaire
    $nom = $_POST['nom'];
    $age = $_POST['age'];
    // Afficher les données
    echo "<h2>Informations soumises :</h2>";
    echo "Nom : " . $nom . "<br>";
    echo "Âge : " . $age . "<br>";
}

Plus d’infos sur le traitement des formulaires avec PHP : PHP: Utiliser les formulaires


Lorsque le formulaire est soumis, les données sont transmises au script PHP indiqué dans l’attribut action de la balise <form>. La méthode HTTP utilisée (attribut method de la balise <form>) permet de déterminer où les données seront disponibles après soumission du formulaire.

Selon la méthode utilisée par le formulaire, les données sont disponibles:

$_GET et $_POST sont des variables Superglobales, ce qui signifie qu’elles sont disponibles quel que soit le contexte du script.

Le formulaire contient 2 champs : nom et age (visible dans l’attribut name de chaque champ).

Lorsque le formulaire est soumis, PHP va utiliser la valeur de l’attribut name de chaque champ pour créer un tableau associatif dont les clés seront les name des différents champs et la valeur associée sera celle saisie dans le champ correspondant.

Never Trust User Input

Il convient de contrôler les données soumises dans un formulaire car … NEVER TRUST USER INPUT !.

Les contrôles effectués côté serveur avec PHP seront plus efficaces et sécurisés que tous les contrôles côté client avec Javascript (Javascript peut être désactivé dans le navigateur client).

Contrôlez systématiquement les données entrantes

Consultez la page de la fonction filter_var() pour découvrir tous les contrôles disponibles dans le langage PHP.

Si vous devez contrôler des formats de données particuliers, vous devrez probablement utiliser des expressions régulières.

Reprenons notre script traitement.php et ajoutons-y des contrôles de saisie :

<?php
// traitement.php avec contrôles de saisie
// Si la méthode HTTP de la requête est "POST"
// if (!empty($_POST)) { // variante
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    try {
        // Vérification que toutes les données ont bien été soumises
        // Si l'une des donnée est manquante, on lève une exception qui sera attrapée dans le bloc "catch"
        if(!isset($_POST['nom'], $_POST['age'])) {
            throw new Exception('Le formulaire est incomplet');
        }

        // Récupérer les données du formulaire
        $nom = $_POST['nom'];
        $age = $_POST['age'];

        // Contrôle du nom : Uniquement des lettres et entre 2 et 50 caractères
        // Si le nom ne respecte pas le format attendu : erreur
        if(!preg_math('/^[a-zA-Z]{2,50}$/', $nom)) {
            throw new Exception('Le format du nom est incorrect');
        }

        // contrôle de l'age : Doit être un entier entre 1 et 120
        // Si l'âge ne respecte pas les conditions : erreur
        if(!filter_var(
            $age, 
            FILTER_VALIDATE_INT, 
            ["options" => ['min_range' => 1, 'max_range' => 120]]
        )) {
            throw new Exception('L\âge renseigné est invalide');
        }

        // Une fois les contrôles effectués, et à partir de ce point, on considère les données valides. Nous pouvons donc les exploiter.

        // Afficher les données
        echo "<h2>Informations soumises :</h2>";
        echo "Nom : " . $nom . "<br>";
        echo "Âge : " . $age . "<br>";
    } catch(Exception $ex) {
        // Si une erreur est levée dans le bloc "try" ci-dessus, l'erreur correspondante est affichée et le script s'arrête
        echo $ex->getMessage();
        exit;
    }    
}

Exercez vous

Formulaire de contact

Créer un répertoire pour cet exercice.

Créer un fichier contact.html et y implémenter un formulaire de contact demandant à l’utilisateur de saisir :

Le formulaire doit être soumis avec la méthode POST vers le fichier traitement-contact.php.

Dans le même répertoire, créer ensuite un fichier traitement-contact.php qui implémentera les opérations suivantes :

Lorsque vous avez terminé d’implémenter ces 2 fichiers et après avoir vérifié leur bon fonctionnement, trouvez une solution pour contrôler les données saisies :

Lorsque vous avez terminé d’implémenter ces contrôles, ajouter la vérification suivante :

Pour vous aider :

Valider votre travail avec un formateur.

Lorsque vous avez terminé, vous pouvez accéder à la suite