W3docs

Comprendre les superglobales PHP : la variable $_REQUEST

Découvrez la superglobale $_REQUEST en PHP, qui regroupe $_GET, $_POST et $_COOKIE, avec des exemples pratiques et les bonnes pratiques de sécurité.

Le langage PHP dispose de nombreuses variables intégrées, appelées superglobales, qui offrent un moyen pratique d'accéder aux données provenant de diverses sources dans vos scripts. L'une des superglobales les plus utilisées est la variable $_REQUEST, qui combine les valeurs des variables $_GET, $_POST et $_COOKIE dans un seul tableau.

Dans cet article, nous allons approfondir la variable $_REQUEST, en explorant ses propriétés, ses cas d'utilisation et les bonnes pratiques pour l'utiliser dans vos scripts PHP.

Qu'est-ce que la variable $_REQUEST ?

La variable $_REQUEST est une superglobale PHP — un tableau associatif automatiquement disponible dans toutes les portées de votre script. Elle contient les données soumises au serveur par différents moyens, tels que les requêtes GET et POST, ou les cookies. Elle combine les données des variables $_GET, $_POST et $_COOKIE dans un seul tableau.

L'ordre dans lequel ces sources sont fusionnées est contrôlé par les directives request_order et variables_order dans php.ini. Cela est important car si la même clé existe dans plusieurs sources, c'est la dernière source listée dans request_order qui l'emporte. Par défaut sur la plupart des installations modernes, la valeur est GP (GET, puis POST), ce qui signifie que les valeurs POST écrasent les valeurs GET portant le même nom, et que les cookies ne sont pas inclus du tout :

; php.ini
request_order = "GP"   ; only $_GET and $_POST feed $_REQUEST

Étant donné que ce comportement dépend de la configuration du serveur, ne supposez jamais que $_REQUEST contient des données de cookies sans avoir vérifié le paramètre request_order.

Quand utiliser la variable $_REQUEST

La variable $_REQUEST est utile lorsque vous souhaitez accéder aux données soumises par le client, quelle que soit la méthode utilisée. Par exemple, si vous souhaitez traiter un formulaire soumis par l'utilisateur, vous pouvez utiliser la variable $_REQUEST pour accéder aux valeurs soumises dans le formulaire, sans avoir à savoir si le formulaire a été soumis via la méthode GET ou POST.

Bien que $_REQUEST puisse inclure des données de cookies, il est recommandé d'accéder directement aux cookies via $_COOKIE pour plus de clarté et de sécurité.

Comment accéder aux données dans la variable $_REQUEST

Pour accéder aux données dans la variable $_REQUEST, il suffit d'utiliser la notation de tableau en fournissant la clé correspondant à la valeur que vous souhaitez récupérer. Par exemple, si vous avez un formulaire avec un champ de texte nommé "username", vous pouvez accéder à la valeur soumise dans ce champ comme suit :

Exemple de base pour lire une valeur

$username = $_REQUEST['username'];
// Always validate and sanitize input before use

Comme une clé peut être absente (par exemple, lors du premier chargement de la page avant qu'un formulaire soit soumis), vérifiez d'abord qu'elle existe. L'opérateur de fusion null (??) est la façon la plus propre de fournir une valeur par défaut :

$username = $_REQUEST['username'] ?? 'guest';
echo "Hello, " . htmlspecialchars($username);

Si vous oubliez la vérification d'existence et que la clé est absente, PHP émet un avertissement Undefined array key — veillez donc toujours à protéger vos lectures.

Un exemple complet de formulaire

La vraie valeur de $_REQUEST est que le même gestionnaire fonctionne que le formulaire utilise method="get" ou method="post". L'exemple ci-dessous affiche un formulaire et traite ses données quelle que soit la méthode :

<?php
// handler.php
if (isset($_REQUEST['name'])) {
    // Never trust raw input — escape it before output
    $name = htmlspecialchars(trim($_REQUEST['name']));
    echo "Welcome, {$name}!";
}
?>

<form method="post" action="handler.php">
    <input type="text" name="name" placeholder="Your name">
    <button type="submit">Submit</button>
</form>

Remplacez method="post" par method="get" et le code PHP ne change pas — c'est précisément la commodité qu'offre $_REQUEST.

$_REQUEST vs $_GET vs $_POST

SuperglobaleSource des donnéesÀ utiliser quand
$_GETChaîne de requête URL (?key=value)Vous savez que les données arrivent via l'URL (liens, recherche).
$_POSTCorps de la requête HTTPVous gérez des soumissions de formulaires, des téléchargements ou des actions modifiant l'état.
$_REQUEST$_GET + $_POST (+ $_COOKIE, selon la configuration)La méthode est véritablement inconnue et vous devez accepter l'une ou l'autre.

Pour plus d'informations sur les tableaux dédiés, consultez les chapitres $_GET et $_POST, ainsi que la gestion des formulaires PHP pour des exemples complets.

Bonnes pratiques pour travailler avec la variable $_REQUEST

Lors de l'utilisation de la variable $_REQUEST, il est important de suivre certaines bonnes pratiques pour garantir la sécurité et la fiabilité de vos scripts. Voici quelques bonnes pratiques :

  • Validez et assainissez toutes les données reçues du client pour vous assurer qu'elles sont sûres à utiliser dans vos scripts.
  • Préférez les superglobales spécifiques comme $_GET ou $_POST lorsque la méthode de requête est connue, car $_REQUEST est généralement déconseillée dans le PHP moderne en raison d'une potentielle pollution des paramètres et d'ambiguïtés.
  • Évitez d'utiliser la variable $_REQUEST pour traiter des données sensibles, telles que des mots de passe ou d'autres informations confidentielles, afin de prévenir les risques de sécurité.
  • Utilisez les fonctions de filtrage PHP (par exemple filter_input() ou filter_var()) pour valider et assainir les entrées de manière structurée et réutilisable.
  • Pour les cookies, lisez directement $_COOKIE ; pour les données de session, utilisez $_SESSION — ni l'un ni l'autre ne doit figurer dans des chemins de code sujets à la pollution des requêtes.

Conclusion

La variable $_REQUEST offre un moyen unifié d'accéder aux données client quelle que soit la méthode de soumission. En comprenant ses dépendances de configuration, ses ambiguïtés potentielles et les bonnes pratiques de sécurité, vous pouvez l'utiliser efficacement dans vos scripts PHP. Bien que le développement moderne favorise souvent l'utilisation explicite de $_GET ou $_POST, $_REQUEST reste un outil utile pour gérer des sources d'entrée mixtes lorsqu'elle est correctement configurée.

Pratique

Pratique
Quels sont les tableaux globaux fournis en PHP pour traiter les données transmises via des requêtes HTTP ?
Quels sont les tableaux globaux fournis en PHP pour traiter les données transmises via des requêtes HTTP ?
Was this page helpful?