13- Les tableaux POST et GET

Les tableaux POST et GET stockent les données envoyées par le protocole HTTP (dont la méthode décrite en-tête est post ou get) à l’adresse de la page concernée. Ces deux tableaux sont des variables superglobales, c’est à dire qu’il est possible d’y accéder de n’importe quel script PHP sur notre site (leur portée n’est pas locale). Contrairement à POST, les données envoyées par GET sont visibles dans l’adresse d’envoie sous la forme suivante : http//www.monsite.com/mapage?var1=foo&var2=bar.

L’utilisation des envois HTTP sont très utiles pour recevoir des informations du client, notamment des données de formulaires. Une fois ces données transmises, il faut les récupérer et les utiliser.

Il est possible d’accéder à ces tableaux en utilisant les variables $_POST[ ] et $_GET[ ], mais également par le tableau $_REQUEST[ ] qui mélangent les deux. Attention, les underscores et majuscules ne sont pas optionnelles.

Pour accéder à une variable stockée dans le tableau, on se sert de la clé correspondante, ainsi, en GET, on va utiliser $_GET[“var1”] et $_GET[“var2”] pour obtenir les valeurs foo et bar.

Il est important, avant d’assigner la valeur d’un élément des tableaux POST et GET, de savoir si cette valeur existe dans le tableau, sinon cela déclenchera une erreur. Pour savoir si une variable existe, il faut utiliser la méthode isset(). Cette méthode renvoie true si la valeur est assignée et false le cas échéant.

Exemple d’affectation de variable par tableau POST :

// assignation en structure conditionnelle
if(isset($_POST["foo"])){
   $bar = $_POST["foo"];
}

//assignation ternaire
$bar = isset($_POST["foo"]) ? $_POST["foo"] : '';

// assignation ternaire avec opérateur de fusion nulle
$bar = isset($_POST["foo"]) ?? '';

Même si l’objet de ce cours n’est pas le HTML ni le Javascript, précisons néanmoins que pour un simple formulaire HTML il est nativement possible d’envoyer des données en GET et en POST avec les syntaxes suivantes :

Avec GET :

<!--côté client-->
<form action="/mon/adresse.php" method="get">
   <label for="name">First name</label>
   <input type="text" name="firstName" placeholder="Your name" id="name">
   <input type="submit" value="Submit">
</form>

<?php
// Côté serveur sur /mon/adresse.php
$foo = isset($_GET["firstName"]) ?? '';
var_dump($foo); // écrit ce que l'on a écrit dans l'input "firstName"
?>

Avec POST :

<!--côté client-->
<form action="/mon/adresse.php" method="post">
   <label for="name">First name</label>
   <input type="text" name="firstName" placeholder="Your name" id="name">
   <input type="submit" value="Submit">
</form>

<?php
// Côté serveur sur /mon/adresse.php
$foo = isset($_POST["firstName"]) ?? '';
var_dump($foo); // écrit ce que l'on a écrit dans l'input "firstName"
?>

Il est courant d’utiliser ces tableaux pour récupérer les données envoyées en AJAX par le Javascript, mais cela sera vu plus tard.