Les variables PHP $_GET et $_POST

Il existe deux méthodes pour envoyer les données à partir du navigateur client au serveur web:
  • La méthode GET
  • La méthode POST
Les données envoyées sont stockées dans des variables PHP $_GET et $_POST qui font partie des variables globales et peuvent être appelées partout dans un code PHP. Les deux variables $_GET et $_POST sont utilisées pour lire les informations envoyées dans un tableau à partir du code HTML avec les méthodes get et post et capturées par le serveur PHP. En d'autres mots, les variables $_GET et $_POST permet aux page de communiquer entre eux.

La page HTML ci-dessous contient un formulaire HTML avec des éléments input de différent types: text, password, checkbox, radio, select... Quand l'utilisateur remplit ces éléments et clique sur le bouton submit, les données seront transférées vers le fichier destination "exemple.php" spécifié dans l'attribut action de l'élément form.

L'image suivante représente un exemple de formulaire HTML avec la méthode GET et le résultat capturé par la page PHP.

exemple d'un formulaire html et php

La méthode GET

La méthode GET envoie les informations encodées à la page destination. La page et les informations encodées sont séparés par le caractère ?

http://www.exemple.com/index.php?name1=valeur1&name2=valeur2
Jetons un œil sur le formulaire HTML ci-dessous. Dans l'élément form, il faut préciser comment on va envoyer les informations au serveur dans l'élément "method".

<form action="imprime_infos.php" method="GET">
Nom d'utilisateur: <input type="text" name="nom" />
Age: <input type="text" name="age" />
<input type="submit" value="Submit">
</form>

exemple d'un form html avec méthode get

à l'intèrieur du fichier "imprime_infos.php", on a utilisé la variable $_GET pour collecter les valeurs reçues (nom et age).

<?php
if( $_GET["nom"] || $_GET["age"] ) {
echo "Bonjour ". $_GET['nom']. "<br/>";
echo "Vous avez ". $_GET['age']. " ans.";
}
?>
Après l'exécution du code avec sous le serveur WampServer, on a obtenu le résultat ci-dessus dont les informations sont visibles dans la barre d'adresse.

$_GET et form

- La méthode GET produit une longue chaîne de caractères qui apparaît dans le log du serveur et l'historique du navigateur.
- Le nombre de caractères envoyés avec la méthode GET est limité à 1024 caractères seulement. Donc on peut pas envoyer un long texte.
- Il ne faut jamais utiliser la méthode GET pour envoyer des informations sensibles comme le mot de passe ou le numéro et le code de la carte de crédit.
- GET ne peut pas envoyer des données binaires, comme les images et les documents au serveur.
- Les données envoyées par la méthode GET sont accessibles en utilisant la variables d'environnement QUERY_STRING.
- PHP possède un tableau $_GET pour accéder à toutes les informations envoyées avec la méthode GET.
- GET doit seulement utilisée pour récupérer les informations.

La méthode POST

Comme il est décrit ci-avant, la méthode GET n'est pas sécurisée du tout, et par conséquant, ça a conduit les développeurs PHP à développer une solution efficace pour envoyer les informations sans qu'elles apparaissent dans la barre d'adresse. En plus, GET est limitée à 1024 caractères. Donc, il vaut mieux envoyer les données d'un formulaire en utilisant la méthode POST. La méthode POST marche comme la méthode GET, mais elle est plus sécurisée que GET parce que les valeurs ne sont pas visibles dans la barre d'adresse du navigateur et ne sont pas sauvegardées dans l'historique du navigateur.

Pour utiliser POST, mettez le mot clé POST à la place de GET.

<form action="imprime_infos.php" method="POST">
Nom d'utilisateur: <input type="text" name="nom" />
Age: <input type="text" name="age" />
<input type="submit" value="Submit">
</form>
Et pour collecter les informations, utilisez la variable $_POST:

<?php
if( $_POST["nom"] || $_POST["age"] ) {
echo "Bonjour ". $_POST['nom']. "<br/>";
echo "Vous avez ". $_POST['age']. " ans.";
}
?>
L'exécution montre que les informations ne sont pas visibles dans la barre d'adresse:

La variable $_POST et form

Les bénéfices de l'utilisation de la méthode POST:

- La méthode POST n'a aucune restriction au niveau de la taille de données à envoyer.
- Les données envoyées ne sont pas mémorisées dans l'historique du navigateur.
- POST peut être utilisée pour envoyer des données binaires.
- Les données envoyées par la méthode POST sont passées par l’entête HTTP donc la sécurité dépend du protocole HTTP. En utilisant un HTTP sûr vous pouvez être certain que vos informations sont protégées.
- PHP possède un tableau $_POST pour accéder à tous les informations envoyées avec la méthode POST.

La variable $_REQUEST

La variable $_REQUEST contient le contenu de $_GET, $_POST et $_COOKIE. $_REQUEST est utile pour recevoir les données au cas où elles proviendraient des deux méthodes $_GET et $_POST.

Essayez l'exemple suivant dans le fichier "imprime_infos.php":

<?php
if( $_REQUEST["nom"] || $_REQUEST["age"] ) {
echo "Bonjour ". $_REQUEST['nom']. "<br/>";
echo "Vous avez ". $_REQUEST['age']. " ans.";
}
?>