Faut-il utiliser $_REQUEST ?

Depuis que je suis tout petit, j'utilise $_GET pour les données provenant de l'url et $_POST pour celles provenant de mes formulaires (utilisant la méthode "post"!).

En lisant divers articles, je me demande si je ne prends pas un peu la tête et si je ne devrais pas utiliser $_REQUEST quelle que soit la provenance des données. Peu importe la provenance, de toute façon il faut filtrer, vérifier, contrôler la cohérence de ces données.

Pour commencer par le commencement, $_REQUEST est un tableau associatif constitué du contenu des variables $_GET, $_POST, $_COOKIE.

Nombreux sont ceux qui se disent au premier abord que cela est vraiment important de pouvoir distinguer la provenance des informations. Si l'utlisateur envoie les données par l'url (méthode "get") ou via un formulaire utilisant la méthode "post" qu'est-ce qui est le plus important ? La façon de recevoir les données ou les données elles-même ? Pour ma part je pense que la façon de recevoir les données n'a aucune importance. L'important est de bien contrôler ce que l'on reçoit et de ne faire confiance à aucune donnée même celles qui pourraient sembler anodines et non modifiables telle que $_SERVER['PHP_SELF'] [1]. Du coup l'utilisation de $_REQUEST serait plutôt déconseillée aux débutants qui ont déjà du mal à bien faire la différence entre $_GET et $_POST. Ceux-ci se contentent généralement de peu de vérifications sur les données transmises via la méthode "post"; ces données leur semblent sûres. Je ne parle même pas des cookies!

On pourrait se dire que l'utilisation de $_REQUEST pourrait être intéressante pour les cas où on laisse le choix aux utilisateurs de transmettre les données en utilisant la méthode "get" ou la méthode "post". La gestion de la provenance des données serait ainsi transparente.

Je vois un réel intéret d'utiliser $_REQUEST pour le cas où je veux continuer une session valide sans dépendre de la configuration du serveur, c'est-à-dire sans se demander de quelle manière transite l'identifiant de session (soit par cookie, soit par l'url soit par un champ caché d'un formulaire) alors au lieu d'utiliser une cascade de if pour savoir d'où vient l'identifiant je peux utiliser un code tel que:

<?php
if (isset($_REQUEST[session_name()])) {
  
session_start();
}
?>

Pour conclure je ne suis pas complétement convaincu d'utiliser ce tableau magique qu'est $_REQUEST surtout si on se réfère à l'utilisation des méthodes "get" et "post" et sur une architecture REST d'une application web. Les méthodes "get" et "post" sont bien distinctes et donc récupérer les données sans en connaitre la provenance leurs fait perdre un peu de leur sens.

[1] Je m'égare; ce sera l'objet d'un prochain billet. Oui j'ai honte de faire du teasing!

Haut de page