Récupération des données du formulaire en PHP
Sommaire
- 1- Objectifs
- 2- Présentation
- 3- Vérifier l’envoi du formulaire
- 3.1- Syntaxe HTML
- 3.2- Syntaxe PHP
- 4- Cas de la méthode POST
- 4.1- Contrôle d'existence des variables
- 4.2- Récupérer les valeurs de la balise <input> en PHP
- 4.2.1- Exemple
- 4.3- Récupérer les valeurs des textarea avec PHP
- 4.4- Récupérer les valeurs des checkbox en PHP
- 4.4.1- Comment vérifier si la case est cochée ?
- 4.5- Récupérer les valeurs des boutons radio (radiobutton) en PHP
- 4.5.1- Comment vérifier si la case est cochée ?
- 4.6- Récupérer les valeurs de la balise <select>(ou liste déroulante) en PHP
- 4.6.1- Comment vérifier si une option de la balise <select>(ou liste déroulante) est sélectionnée ?
- 4.7- Avant de finir
- 5- Cas de la méthode GET
- 5.1- Exemple
- 6- Méthodes GET vs POST
- 7- Maintien de l’état du formulaire
- 8- Applications
- 8.1- App01
- 8.2- App02
- 8.3- App03
- 8.3.1- Sommaire du cours PHP
Récupération des données du formulaire en PHP
-
Objectifs
- Connaitre les méthodes de récupération de données Get et POST de PHP
-
Présentation
- Maintenant que vous savez créer de beaux formulaires en HTML, CSS, JavaScript et Bootstrap , vous allez voir comment récupérer les données entrées par l’utilisateur dans les différents champs du formulaire avec PHP.
- Tout d’abord, que se passe-t-il lorsque l’utilisateur clique sur le bouton d’envoi ? Une requête HTTP est envoyée au serveur à destination du script désigné par l’attribut
action
de l’élément <form>. - La requête contient toutes les associations entre les noms des champs et leur valeur. Ces associations se trouvent dans l’en-tête HTTP si la méthode
POST
est utilisée et dans l’URL s’il s’agit de la méthodeGET
. - Les formulaires sont les principaux moyens de récupérer des informations sur un site web crée avec HTML et PHP.
- L’attribut
action
de la balise <form> du formulaire sert à définir la page appelée par celui-ci . C’est cette page qui recevra les données du formulaire et qui sera chargée de les traiter. - L’attribut "méthod" : de la balise <form> indique par quel moyen les données sont envoyées à la page de destination.
- Les données d’un formulaire PHP peuvent être envoyées de deux manières, avec la méthode POST ou la méthode GET.
- On doit spécifier l’adresse de la page vers laquelle les données seront envoyées.
- Pour des raisons de sécurité, n’écrivez pas l’adresse de la page vers laquelle les données seront envoyées, mais plutôt de spécifier une variable de serveur PHP, tout en la sécurisant avec
htmlspecialchars()
. -
Vérifier l’envoi du formulaire
- En PHP, la fonction
isset()
permet de vérifier si une variable est définie. Dans ce cas, si la variable$_POST[‘envoi’]
est déclarée, cela signifie que le formulaire a été soumis. La clé envoi correspond au nom du bouton qui soumet le formulaire -
Syntaxe HTML
-
Syntaxe PHP
-
Cas de la méthode POST
- C’est la méthode conseillée puisque les données sont envoyées de façon confidentielle. Par ailleurs cette méthode s’impose pour l’envoi de fichiers ou de données importantes
- Les données seront récupérées par la superglobale
$_POST [ ]
. Il s’agit d’un tableau associatif dont les clés correspondent aux valeurs des attributs « name » des « élements » HTML du formulaire. -
Contrôle d’existence des variables
- Le contenu de chaque champ défini dans le formulaire associé au script PHP est porté dans l’un des deux méthodes
"$_POST[]"
pour les variables HTML envoyées par méthode POST, et"$_GET[]"
pour les variables HTML envoyées par méthode GET ou associées à l’URL du formulaire. - Le contrôle d’existence du champ consiste à vérifier s’il existe bien une occurrence portant le nom du champ HTML dans le formulaire ou non.
-
Récupérer les valeurs de la balise <input> en PHP
- Pour récupérer le contenu d’un champ de saisie de texte (input de type texte) en PHP, vous pouvez utiliser la superglobale ‘
$_POST
‘ ou ‘$_GET
‘, selon la méthode de transmission des données définie dans le formulaire. - En HTML, le champ de texte permet à l’internaute de saisir des mots ou des textes de taille limitée
-
Exemple
- Supposons que vous avez un formulaire HTML contenant un champ de saisie de texte comme suit :
- Dans ce formulaire, l’attribut ‘name’ input est défini comme « mon_champ_texte ». Lorsque l’utilisateur soumet le formulaire, le navigateur envoie les données saisies dans le champ de texte au serveur PHP.
- Dans le script PHP qui traite les données du formulaire (dans cet exemple, « traitement.php »), vous pouvez récupérer le contenu du champ de texte en utilisant la superglobale ‘$_POST’
-
Récupérer les valeurs des textarea avec PHP
- En HTML, le textarea permet à l’internaute de saisir du contenu plus long sur plusieurs lignes
- Une page qui reçoit des données issues d’une balise textArea par la méthode POST, génère une variable :
$_POST[]
ou par la méthode GET, génère une variable :$_GET[]
- Le code HTML
- Le code PHP
-
Récupérer les valeurs des checkbox en PHP
- Pour récupérer les valeurs des cases à cocher (checkbox) en PHP, vous pouvez utiliser la variable superglobale
$_POST
qui contient les données envoyées à partir d’un formulaire soumis par la méthode POST. - Voici un exemple de code PHP pour récupérer les valeurs des cases à cocher avec le nom « checkbox_name » :
- Voici un exemple d’un formulaire HTML avec deux cases à cocher :
- Dans cet exemple, les cases à cocher ont le même nom ‘fruit‘
$_POST['fruit']
ou$_GET['fruit']
en fonction de la méthode d’envoi de votre formulaire - Dans le fichier de traitement traitement.php, vous pouvez récupérer les valeurs des cases à cocher de la manière suivante :
- Dans cet exemple, on vérifie d’abord si le tableau ‘
isset($_POST['fruit'])
‘. Ensuite, on parcourt le tableau avec une boucle ‘foreach
‘ pour afficher les valeurs sélectionnées. -
Comment vérifier si la case est cochée ?
-
Récupérer les valeurs des boutons radio (radiobutton) en PHP
- Pour récupérer les valeurs des boutons radio (radiobutton) en PHP, vous pouvez utiliser la variable superglobale ‘$_$_GET en fonction de la méthode d’envoi de votre formulaire.
- Voici un exemple d’un formulaire HTML avec deux boutons radio :
- Dans cet exemple, les boutons radio ont le même nom « $_POST[‘sexe’] » ou « $_GET[‘sexe’] » en fonction de la méthode d’envoi de votre formulaire.
- Dans le fichier de traitement traitement.php, vous pouvez récupérer la valeur du bouton radio sélectionné de la manière suivante :
-
Comment vérifier si la case est cochée ?
-
Récupérer les valeurs de la balise <select>(ou liste déroulante) en PHP
- Pour récupérer les valeurs de la balise ‘select‘ en PHP, vous pouvez utiliser la variable superglobale
$_POST
qui contient les données envoyées à partir d’un formulaire soumis par la méthode POST ou la variable superglobale$_GET
qui contient les données envoyées à partir d’un formulaire soumis par la méthode GET. - Voici un exemple d’un formulaire HTML avec une balise ‘select‘:
- Dans cet exemple, la balise ‘select’ fruit à trois options différentes. Ainsi, lorsque l’utilisateur sélectionne une option, la valeur sélectionnée sera stockée dans la variable ‘
$_POST['fruit']
ou ‘$_GET['fruit']
‘ en fonction de la méthode d’envoi de votre formulaire. - Dans cet exemple, on vérifie d’abord si la variable ‘isset($_POST[‘fruit’])‘ existe. Ensuite, on récupère la valeur sélectionnée en stockant la variable $_POST[‘fruit’] dans une variable ‘$fruit‘. Finalement, on affiche un message en utilisant la valeur de la variable ‘$fruit‘.
-
Comment vérifier si une option de la balise <select>(ou liste déroulante) est sélectionnée ?
-
Avant de finir
-
Cas de la méthode GET
- La méthode
GET
est utilisée par défaut, si rien n’est renseigné, pour faire circuler les informations du formulaire en clair dans la barre d’adresse en suivant le format ci-après : http://www.apcpedagogie.com/chemin/scriptphp.php?var1=valeur1&var2=valeur2
- Cette adresse signifie que nous allons transmettre à la page scriptphp.php les couples variable / valeur transmis en paramètre.
- La première variable d’une
url
est toujours précédée du symbole?
alors que les autres seront précédées du symbôle&
. - Les noms des variables correspondent aux attributs
name
des éléments du formulaire et les valeurs aux attributsvalue
. - Les caractères accentués et l’apostrophe sont codés en hexadécimal. Les espaces sont remplacées par le signe +, et chaque paire nom=valeur est séparée par le signe &.
-
Exemple
- Avec la méthode GET, vous récupérez les données du formulaire dans les variables
$_GET ["nom"]
et$_GET["niveau"]
, comme ci-dessous : -
Méthodes GET vs POST
-
Maintien de l’état du formulaire
- Lorsque le script contenant le formulaire est chargé du traitement des données, l’ensemble de la page est réaffiché après traitement, de même que l’ensemble du formulaire.
- Le formulaire se retrouve alors dans son état initial, et toutes les saisies effectuées sont effacées.
- En cas d’erreur de saisie sur un seul champ, l’utilisateur est obligé de recommencer l’ensemble de la saisie. S’il s’agit d’un long questionnaire, il y a de quoi s’impatienter.
- Pour éviter cela, il est utile de maintenir l’état du formulaire après traitement en réaffichant l’ensemble des saisies.
- Pour le faire, il suffit de définir l’attribut
value
avec la variable$_POST["nom_du_champs"]
, non sans avoir au préalable contrôlé l’existence de cette variable. Lors du premier affichage de la page, la zone est donc vide ou contient le dernier nom saisi. - Le code PHP de notre exemple est donc :
-
Applications
-
App01
- Écrire un formulaire « Calculatrice » avec :
- Deux zones de texte pour la saisie des opérandes,
- Une liste déroulante comprenant les opérandes, pour le choix de l’opération
- Un groupe de 4 cases à cocher, pour le choix de l’opération
- Il n’est pas demandé de faire la mise en forme du formulaire (pas de css)
- Afficher le résultat de l’opération dans une deuxième page avec la méthode GET.
-
App02
- On souhaite créer un formulaire d’inscription « formulaireInscription.php » des visiteurs qui contient les champs suivants:
- Civilité: liste de sélection qui contient les options Mlle, Mme et M.
- Deux champs texte (type="text") avec les labels nom et prénom
- Un champ date (type="date") avec label Date de naissance
- Un champ mot de passe (type="password") avec label Mot de passe
- Un champ Récrire mot de passe (type="password") avec label Réécrire mot de passe
- Un bouton de soumission du formulaire (type="submit")
- La méthode POST sera utilisée pour l’envoi du formulaire.
- L’attribut action du formulaire devra être vide.
- Le script vérifie l’existence des données et les affichant dans un tableau présenté en HTML et CSS.
- Utiliser le fichier Style.css suivant pour mettre en forme votre formulaire
- L’objectif ici n’est pas d’enregistrer les données entrées par le client car nous n’avons pas encore vu les fichiers et les bases de données, mais seulement contrôler la saisie à bases des fonctions que nous avons déjà vu en cours jusqu’ici.
- Si par exemple le client laisse le champ nom vide on affichera le message « Nom laissé vide » en rouge en haut du formulaire, ou si les deux mots de passes renseignés ne sont pas identique le message « Mots de passes non identiques » sera affiché.
- Si tous les champs sont valides, alors on affichera les informations saisis par le client.
- Dans le cas où un champ présente un problème (laissé vide par exemple), alors il faut conserver les valeurs déjà saisis au sein de formulaires.
-
App03
- Un site d’annonces immobilières proposant un plan de financement aux visiteurs.
- L’application est constituée de deux fichiers, calcul_pret.html et calcul_pret.php.
- Le fichier calcul_pret.html affiche un formulaire de saisie des données nécessaires au calcul du prêt (voir figure suivante).
- Le fichier calcul_pret ne contient aucun code PHP et peut donc être enregistré avec l’extension .html.
- L’attribut
action
de l’élément <form> désigne le fichier calcul_pret.php, qui est chargé du traitement des données et de l’affichage des résultats. - Le fichier calcul_pret.php vérifie d’abord l’existence des variables
$_POST["capital"]
,$_POST["taux"]
et$_POST["duree"]
, toutes nécessaires au calcul du prêt. - La variable
$_POST["assur"]
est nécessaire dans tous les cas. Elle a la valeur 1 puisque le bouton radio « OUI » est coché par défaut. - La variable $capital correspond au capital emprunté . La variable $taux désigne le taux mensuel sous forme décimale.
- Si l’utilisateur saisit 6 pour le taux annuel, la variable $taux vaut 6/100/12, soit 0,005, ou 0,5 % par mois.
- La $duree est la durée en mois.
- $assur renvoie au montant de l’assurance mensuelle, soit 0,035 % du capital emprunté. Cette variable prend la valeur 0 si
$_POST["assur"]
vaut 0. - Vient ensuite le calcul de la mensualité selon la formule financière suivante :
$mens=($capital*$taux)/(1-pow((1+$taux),–$duree))
- Le script affiche la mensualité hors assurance ainsi que le tableau d’amortissement contenant, entre autres, le capital restant dû et les intérêts de chaque période.
- La figure suivante donne un exemple de résultat souhaité.
- Si le formulaire est incomplet, l’instruction
header()
affiche à nouveau la page de saisie calcul_pret.html, obligeant l’utilisateur à effectuer une saisie complète. - Travail demandé:
- Réaliser les deux fichiers décrits ci-dessus
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<form method="post">
<input type="submit" name="envoi">
</form>
<?php
if(isset($_POST['envoi'])){ // si formulaire soumis
}
?>
<?php
if(isset($_POST["nom"]) && isset($_POST["prenom"]))
{ echo "<h2> Bonjour ". stripslashes($_POST["nom"]). "
vous êtes ".stripslashes($_POST["prenom"]).
" nouveau en PHP</h2>";
} ?>
<form method="post" action="traitement.php">
<input type="text" name="mon_champ_texte">
<input type="submit" value="Envoyer">
</form>
<?php
$contenu = $_POST['mon_champ_texte'];
echo $contenu; // affiche le contenu du champ de texte
?>
<textarea name="gouts" placeholder="Décrivez vos goûts en détail" cols="50" rows="5"></textarea>
<?php echo stripslashes($_POST["gouts"])?>
<form method="post" action="traitement.php">
<input type="checkbox" name="fruit[]" value="pomme"> Pomme<br>
<input type="checkbox" name="fruit[]" value="banane"> Banane<br>
<input type="checkbox" name="fruit[]" value="orange"> Orange<br>
<input type="submit" value="Envoyer">
</form>
<?php
if(isset($_POST['fruit'])) {
// Parcourir le tableau des cases à cocher
foreach($_POST['fruit'] as $fruit) {
echo $fruit . "
";
}
}
?>
<form method="post" action="traitement.php">
<input type="checkbox" name="fruit[]" value="pomme" <?php if(isset($_POST['Envoyer'])){
if(!empty($_POST['fruit'])) {
if (in_array("pomme", $_POST['fruit'])){
echo "checked";
}
}
}
?>> Pomme<br>
<input type="checkbox" name="fruit[]" value="banane"<?php if(isset($_POST['Envoyer'])){
if(!empty($_POST['fruit'])) {
if (in_array("banane", $_POST['fruit'])){
echo "checked";
}
}
}
?>>> Banane<br>
<input type="checkbox" name="fruit[]" value="orange" <?php if(isset($_POST['Envoyer'])){
if(!empty($_POST['fruit'])) {
if (in_array("orange", $_POST['fruit'])){
echo "checked";
}
}
}
?>>> Orange<br>
<input type="submit" value="Envoyer">
</form>
<form method="post" action="traitement.php">
<input type="radio" name="sexe" value="homme"> Homme<br>
<input type="radio" name="sexe" value="femme"> Femme<br>
<input type="submit" value="Envoyer">
</form>
<?php
if(isset($_POST['sexe'])) {
$sexe = $_POST['sexe'];
echo "Vous êtes " . $sexe;
}
?>
<form method="post" action="traitement.php">
<input type="radio" name="sexe" value="homme" <?php if(isset($_POST['Envoyer1'])){if($_POST["sexe"]=="homme"){echo 'checked';}}?>> Homme<br>
<input type="radio" name="sexe" value="femme"<?php if(isset($_POST['Envoyer1'])){if($_POST["sexe"]=="femme"){echo 'checked';}}?>> Femme<br>
<input type="submit" value="Envoyer">
</form>
<form method="post" action="traitement.php">
<select name="fruit">
<option value="pomme">Pomme</option>
<option value="banane">Banane</option>
<option value="orange">Orange</option>
</select>
<input type="submit" value="Envoyer">
</form>
<?php
if(isset($_POST['fruit'])) {
$fruit = $_POST['fruit'];
echo "Vous avez sélectionné : " . $fruit;
}
?>
<form method="post" action="traitement.php">
<select name="fruit">
<option value="pomme" <?php if(isset($_POST['Envoyer'])){if($_POST["fruit"]=="pomme"){echo "selected";}}?>>Pomme</option>
<option value="banane"<?php if(isset($_POST['Envoyer'])){if($_POST["fruit"]=="banane"){echo "selected";}}?>>Banane</option>
<option value="orange"<?php if(isset($_POST['Envoyer'])){if($_POST["fruit"]=="orange"){echo "selected";}}?>>Orange</option>
</select>
<input type="submit" value="Envoyer">
</form>
<?php
if(isset($_GET["nom"]) && isset($_GET["niveau"]))
{
echo "<h2> Bonjour ". stripslashes ($_GET["nom"]). " vous êtes ".$_GET["niveau"].
" en PHP</h2>";
} ?>
POST | GET |
---|---|
Valeurs non visibles dans l’URL | Valeurs visibles dans l’URL |
N’a pas de limitation de la longueur des valeurs puisqu’elles sont soumises via le corps de HTTP | A une limitation sur la longueur des valeurs généralement 255 caractères. En effet, les valeurs sont affichées dans l’URL. Notez que la limite supérieure des caractères dépend du navigateur. |
A des performances inférieures par rapport à la méthode Php_GET en raison du temps passé à encapsuler les valeurs Php_POST dans le corps HTTP | A des performances élevées par rapport à la méthode POST en raison de la simple nature de l’ajout des valeurs dans l’URL. |
Prend en charge de nombreux types de données différents tels que chaîne, numérique, binaire, etc. | Prend en charge uniquement les types de données chaîne car les valeurs sont affichées dans l’URL |
Les résultats ne peuvent pas être marqués dans un livre | Les résultats peuvent être marqués dans un livre en raison de la visibilité des valeurs dans l’URL |
- Références:
- https://www.php.net
- Livre PHP7 Cours et exercices Jean Engels 2e édition
- Technologies de l’Information et de la Communication 4 année secondaire