Comprendre les superglobales PHP $_GET
PHP propose plusieurs superglobales qui permettent d'accéder facilement aux données de différentes sources. Découvrez $_GET, son fonctionnement et comment l'utiliser.
PHP propose plusieurs superglobales qui facilitent la lecture des informations provenant de différentes sources de manière simple et unifiée. L'une d'elles est $_GET — le tableau que PHP remplit avec les données trouvées dans la chaîne de requête (query string) de l'URL de la requête en cours. Ce chapitre explique ce que contient $_GET, comment PHP le remplit, comment le lire en toute sécurité, et quand l'utiliser plutôt que $_POST.
Qu'est-ce que $_GET ?
$_GET est une superglobale PHP : un tableau associatif automatiquement disponible dans toutes les portées (dans les fonctions, les classes et les fichiers) sans avoir besoin du mot-clé global. PHP le remplit avec les paires nom/valeur trouvées après le ? dans l'URL de la requête — la chaîne de requête. Les clés sont les noms des paramètres et les valeurs sont leurs contenus (décodés de l'URL).
Comme les données se trouvent dans l'URL, elles sont visibles, mémorisables et partageables. Cela fait de $_GET un choix idéal pour tout ce qu'un utilisateur pourrait vouloir partager via un lien — une requête de recherche, un numéro de page, un identifiant de produit — et un mauvais choix pour tout ce qui est sensible ou volumineux.
Comment fonctionne $_GET ?
Vous passez des variables en les ajoutant à l'URL sous forme de paramètres de requête, sous la forme de paires clé=valeur séparées par & :
http://example.com/script.php?greeting=hello&lang=enLorsque le script s'exécute, PHP analyse la chaîne de requête et remplit $_GET. Le tableau résultant ressemble à ceci :
// $_GET after the request above
[
'greeting' => 'hello',
'lang' => 'en',
]Les valeurs sont toujours des strings (ou des arrays — voir ci-dessous), même lorsqu'elles semblent numériques. ?page=2 vous donne la string "2", pas l'entier 2, donc effectuez un transtypage ou une validation avant d'effectuer des calculs.
Comment lire $_GET en toute sécurité
Vérifiez toujours qu'une clé existe avant de l'utiliser — un paramètre manquant déclenche un avertissement et renvoie null. Utilisez isset() ou l'opérateur de fusion null ?? :
<?php
// Defensive read with a default value
$greeting = $_GET['greeting'] ?? 'Hi';
echo htmlspecialchars($greeting); // safe to print in HTMLLes données dans $_GET proviennent directement du client, donc ne leur faites jamais confiance. Validez et assainissez avant utilisation :
<?php
// Validate that "id" is a positive integer
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false || $id === null) {
echo 'Invalid or missing id';
} else {
echo "Loading product #$id";
}Lorsque vous réaffichez une saisie utilisateur dans une page, passez-la par htmlspecialchars() pour prévenir les attaques de type cross-site scripting (XSS). Lorsque vous l'utilisez dans du SQL, utilisez des instructions préparées plutôt que de la concaténer dans la requête. Consultez filter_input() et filter_var() pour l'ensemble complet des filtres de validation.
Récupérer des données de formulaire avec GET
Un formulaire HTML dont le method est get soumet ses champs comme paramètres de requête, qui apparaissent ensuite dans $_GET :
<form action="search.php" method="get">
<input type="text" name="q" placeholder="Search...">
<button type="submit">Search</button>
</form>Soumettre apple envoie le navigateur vers search.php?q=apple, et dans search.php :
<?php
$query = trim($_GET['q'] ?? '');
if ($query !== '') {
echo 'Results for: ' . htmlspecialchars($query);
} else {
echo 'Please enter a search term.';
}Pour un tutoriel plus approfondi, voir Traitement des formulaires PHP et Validation des formulaires PHP.
Paramètres array et groupés
Répétez un nom avec [] et PHP regroupe les valeurs dans un sous-array — pratique pour les cases à cocher et les filtres à sélection multiple :
http://example.com/filter.php?color[]=red&color[]=blue<?php
// $_GET['color'] is now an array: ['red', 'blue']
foreach ($_GET['color'] ?? [] as $color) {
echo htmlspecialchars($color) . PHP_EOL;
}GET vs POST
$_GET | $_POST | |
|---|---|---|
| Emplacement des données | Chaîne de requête URL | Corps de la requête |
| Visible dans l'URL | Oui | Non |
| Mémorisable / partageable | Oui | Non |
| Limite de taille | Limitée par la longueur de l'URL (~2 Ko) | Beaucoup plus grande en pratique |
| Utiliser pour | Recherches, filtres, pagination, navigation | Connexions, téléversements de fichiers, tout ce qui modifie des données |
Utilisez GET pour la lecture — des requêtes qui ne modifient pas l'état du serveur et que l'utilisateur pourrait vouloir répéter ou partager. Utilisez POST pour l'écriture — soumettre des mots de passe, créer des enregistrements ou envoyer de grands volumes de données. Si vous avez besoin d'un seul point qui lit depuis l'une ou l'autre méthode, consultez $_REQUEST.
Utilisations courantes
- Résultats de recherche — placez la requête dans l'URL pour que les utilisateurs puissent mettre leurs résultats en favori ou les partager.
- Pages dynamiques — passez un paramètre
?id=ou?page=pour contrôler quel contenu est affiché. - Filtrage et tri — encodez les filtres actifs dans l'URL pour que l'état soit préservé lors d'un rechargement.
Conclusion
$_GET vous offre un moyen simple et unifié de lire les données transmises dans la chaîne de requête de l'URL. Il excelle pour les requêtes partageables en lecture seule comme les recherches et la pagination, mais parce que ses valeurs sont visibles et proviennent du client, validez, assainissez et échappez-les toujours avant utilisation. Pour les données qui modifient l'état du serveur ou qui doivent rester privées, utilisez plutôt $_POST.