-
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éthode GET
.
- 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()
.
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
-
- 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
<form method="post">
<input type="submit" name="envoi">
</form>
-
Syntaxe PHP
<?php
if(isset($_POST['envoi'])){ // si formulaire soumis
}
?>
-
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.
<?php
if(isset($_POST["nom"]) && isset($_POST["prenom"]))
{ echo "<h2> Bonjour ". stripslashes($_POST["nom"]). "
vous êtes ".stripslashes($_POST["prenom"]).
" nouveau en PHP</h2>";
} ?>
-
- 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 :
<form method="post" action="traitement.php">
<input type="text" name="mon_champ_texte">
<input type="submit" value="Envoyer">
</form>
- 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’
<?php
$contenu = $_POST['mon_champ_texte'];
echo $contenu; // affiche le contenu du champ de texte
?>
-
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
<textarea name="gouts" placeholder="Décrivez vos goûts en détail" cols="50" rows="5"></textarea>
- Le code PHP
<?php echo stripslashes($_POST["gouts"])?>
-
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 :
<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>
- 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 :
<?php
if(isset($_POST['fruit'])) {
// Parcourir le tableau des cases à cocher
foreach($_POST['fruit'] as $fruit) {
echo $fruit . "
";
}
}
?>
- 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.
-
<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>
Lire le tutoriel
-
- 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 :
<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>
- 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 :
<?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>
-
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‘:
<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>
- 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.
<?php
if(isset($_POST['fruit'])) {
$fruit = $_POST['fruit'];
echo "Vous avez sélectionné : " . $fruit;
}
?>
- 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‘.
-
<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>

-
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 :
https://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 attributs value
.
- 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 :
<?php
if(isset($_GET["nom"]) && isset($_GET["niveau"]))
{
echo "<h2> Bonjour ". stripslashes ($_GET["nom"]). " vous êtes ".$_GET["niveau"].
" en PHP</h2>";
} ?>
-
Méthodes GET vs POST
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 |
-
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