Récupérer et manipuler les données des formulaires HTML en PHP

Le HTML nous permet de créer nos formulaires. Pour récupérer et manipuler les données envoyées, cependant, nous allons devoir utiliser du PHP.

Dans cette leçon, nous allons voir comment récupérer et manipuler (afficher, stocker, etc.) les données récoltées via les formulaires.

 

Les superglobales $_POST et $_GET

Dans la leçon précédente, nous avons créé un formulaire dans une page qui s’appelait formulaire.html.

Notre élément form possédait les attributs suivants : method="post" et action="formulaire.php".

Cela signifie que les données vont être envoyées via transaction post http à la page (ou au script) formulaire.php.

La première chose à comprendre ici est que toutes les données du formulaire vont être envoyées et être accessibles dans le script PHP mentionné en valeur de l’attribut action, et cela quelle que soit la méthode d’envoi choisie (post ou get).

En effet, le PHP possède dans son langage deux variables superglobales $_GET et $_POST qui sont des variables tableaux et dont le rôle va justement être de stocker les données envoyées via des formulaires.

Plus précisément, la superglobale $_GET va stocker les données envoyées via la méthode get et la variable $_POST va stocker les données envoyées via la méthode post.

Les valeurs vont être stockées sous forme d’un tableau associatif c’est-à-dire sous la forme clef => valeur où la clef va correspondre à la valeur de l’attribut name d’un champ de formulaire et la valeur va correspondre à ce qui a été rempli (ou coché, ou sélectionné) par l’utilisateur pour le champ en question.

A noter : On va également pouvoir utiliser la variable superglobale $_REQUEST pour accéder aux données d’un formulaire sans se soucier de la méthode d’envoi. Cependant, utiliser $_REQUEST ne présente généralement que peu d’intérêt en pratique et peut potentiellement ouvrir des failles de sécurité dans nos formulaires. C’est la raison pour laquelle je n’en parlerai pas plus dans ce cours.

 

Affichage simple des données de formulaire reçues

Comme $_GET et $_POST sont des variables superglobales, elles seront toujours accessibles n’importe où dans le script par définition.

On va alors très facilement pouvoir accéder aux données envoyées dans les formulaires en parcourant nos variables superglobales $_GET ou $_POST.

Par exemple, on va pouvoir très simplement afficher les données reçues à l’utilisateur. Pour cela, nous allons echo les valeurs contenues dans $_POST via notre page d’action formulaire.php :

<!DOCTYPE html>
<html>
    <head>
        <title>Page de traitement</title>
        <meta charset="utf-8">
    </head>
    <body>
        <p>Dans le formulaire précédent, vous avez fourni les
        informations suivantes :</p>
        
        <?php
            echo 'Prénom : '.$_POST["prenom"].'<br>';
            echo 'Email : ' .$_POST["mail"].'<br>';
            echo 'Age : ' .$_POST["age"].'<br>';
            echo 'Sexe : ' .$_POST["sexe"].'<br>';
            echo 'Pays : ' .$_POST["pays"].'<br>';
        ?>
    </body>
</html>

On remplit les données du formulaire HTML et on l'envoie à la page de traitement PHP

On utilise la superglobale $_post pour récupérer les données du formulaire HTML en PHP

En pratique, cependant, nous n’allons pas créer des formulaires pour afficher les données aux utilisateurs mais bien pour utiliser les données de notre côté. Généralement, donc, l’utilisateur ne verra pas la page de traitement des données et nous le redirigerons plutôt immédiatement vers une page pertinente.

Par exemple, on va renvoyer l’utilisateur vers une page de remerciement si le formulaire était un formulaire créé pour nous envoyer un message, ou vers la page d’accueil du site ou son espace client si le formulaire était un formulaire de connexion, ou encore le renvoyer vers la page où se situe le formulaire si le formulaire servait à envoyer un commentaire sur un article.

Pour renvoyer un utilisateur vers une autre page, on peut utiliser la fonction PHP header() à laquelle on va passer la page où l’utilisateur doit être renvoyé sous la forme Location : adresse de ma page.

Pour illustrer cela, on va créer deux nouvelles pages formulaire2.php et form-merci.html. Notre page formulaire2.php va être notre nouvelle page d’action, pensez donc bien à modifier la valeur de l’attribut action dans le formulaire.

Dans cette page, nous allons donc effectuer différentes manipulations de données (que l’on va se contenter d’imaginer pour le moment) et renvoyer immédiatement l’utilisateur vers une autre page qu’on appelle ici form-merci.html et qui va être une page de remerciement.

Utilisation de la fonction header en PHP pour renvoyer l'utilisateur vers une autre page

Page de renvoi du formulaire HTML

Formulaire HTML et redirection des utilisateurs en PHP

 

Manipulation et stockage de données

Sur les sites Internet, les formulaires sont utilisés de manière courante pour effectuer différents types d’opération comme :

  • Donner la possibilité à un utilisateur de s’inscrire ;
  • Donner la possibilité à un utilisateur de se connecter ;
  • Permettre à un utilisateur de poster un commentaire ;
  • Permettre à un utilisateur de nous envoyer un message ;
  • Etc.

Dans chacun de ces cas, nous allons manipuler les données envoyées dans des buts différents : enregistrer les données pour une inscription, vérifier les données de connexion envoyées, enregistrer et afficher un commentaire, etc.

Nous n’allons bien évidemment pas ici créer un script complet pour chacune de ces situations car cela serait bien trop long et car cela nous éloignerait du sujet de cette leçon.

Cependant, je vous propose ici de voir comment on va pouvoir réceptionner les données d’un formulaire et les enregistrer en base de données pour vous donner un exemple concret.

Cela va finalement être très simple puisque nous savons que nous avons toutes les données du formulaire stockées dans notre variable $_POST. La vraie difficulté ici va finalement être de savoir manipuler les bases de données. Si vous n’êtes pas au point sur ce sujet, je vous renvoie aux parties précédentes !

De mon côté, je vais réutiliser ma base de données cours créée précédemment dans ce cours et je vais également créer une table form dans cette base de données.

Je vous invite à faire de même, soit en passant par phpMyAdmin, soit via un script PHP comme celui-ci :

<?php
    $serveur = "localhost";
    $dbname = "cours";
    $user = "root";
    $pass = "root";
    
    try{
        //On se connecte à la BDD
        $dbco = new PDO("mysql:host=$serveur;dbname=$dbname",$user,$pass);
        $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        //On crée une table form
        $form = "CREATE TABLE form(
            id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            prenom TEXT,
            mail TEXT,
            age INT,
            sexe TEXT,
            pays TEXT)";
        $dbco->exec($form);
    }
    catch(PDOException $e){
        echo 'Erreur : '.$e->getMessage();
    }
?>

 

Bien évidemment, on crée notre table de façon à ce qu’elle puisse recevoir les données du formulaire. Ici, nous allons donc créer des colonnes prenom (TEXT), mail (TEXT), age (TEXT), sexe (INT) et pays (TEXT) ainsi que bien sûr notre traditionnelle colonne id (INT UNSIGNED AUTO_INCREMENT PRIMARY KEY).

Nous n’avons ensuite plus qu’à insérer dans notre table les données récoltées. Pour cela, nous allons modifier le script de notre page d’action formulaire2.php.

<?php
    $serveur = "localhost";
    $dbname = "cours";
    $user = "root";
    $pass = "root";
    
    $prenom = $_POST["prenom"];
    $mail = $_POST["mail"];
    $age = $_POST["age"];
    $sexe = $_POST["sexe"];
    $pays = $_POST["pays"];
    
    try{
        //On se connecte à la BDD
        $dbco = new PDO("mysql:host=$serveur;dbname=$dbname",$user,$pass);
        $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        //On insère les données reçues
        $sth = $dbco->prepare("
            INSERT INTO form(prenom, mail, age, sexe, pays)
            VALUES(:prenom, :mail, :age, :sexe, :pays)");
        $sth->bindParam(':prenom',$prenom);
        $sth->bindParam(':mail',$mail);
        $sth->bindParam(':age',$age);
        $sth->bindParam(':sexe',$sexe);
        $sth->bindParam(':pays',$pays);
        $sth->execute();
        
        //On renvoie l'utilisateur vers la page de remerciement
        header("Location:form-merci.html");
    }
    catch(PDOException $e){
        echo 'Impossible de traiter les données. Erreur : '.$e->getMessage();
    }
?>

Ici, on commence par stocker les données contenues dans $_POST dans différentes variables PHP simples.

Note : J’expliquerai dans a leçon suivante pourquoi vous ne devriez jamais directement enregistrer les données reçues en base de données comme cela.

On insère ensuite les données dans notre table. Si tout se passe bien, on renvoie l’utilisateur vers la page form-merci.html. Dans le cas où une erreur est rencontrée, on affiche l’erreur.

Vous pouvez essayer de remplir à nouveau votre formulaire !

Envoi de données via un formulaire HTML et stockage en base de données mysql avec pdo en php

Résultat envoi de données via un formulaire HTML et stockage en base de données mysql avec pdo en php

Les données du formulaire ont bien été récupérées et stockées dans notre base mysql avec pdo en php

Note : Bien évidemment, ce script est simplifié à l’extrême et n’est pas utilisable en l’état pour des raisons de sécurité sur les données et etc. L’idée ici est simplement de vous montrer en pratique comment différents éléments du PHP vont pouvoir fonctionner ensemble.

Laisser un commentaire