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 useComme 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
| Superglobale | Source des données | À utiliser quand |
|---|---|---|
$_GET | Chaîne de requête URL (?key=value) | Vous savez que les données arrivent via l'URL (liens, recherche). |
$_POST | Corps de la requête HTTP | Vous 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
$_GETou$_POSTlorsque la méthode de requête est connue, car$_REQUESTest 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
$_REQUESTpour 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()oufilter_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.