Comment passer un tableau dans une query string : analyse complète en PHP

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi passer un tableau dans une URL ? Et pourquoi ce n'est pas aussi simple qu'il n'y paraît ?

\n

Imaginez : vous développez en PHP un filtre de produits pour une boutique en ligne. L'utilisateur sélectionne plusieurs catégories, plusieurs couleurs et une fourchette de prix. Comment transmettre toutes ces données au serveur via une requête GET ? La solution évidente — ?category=1&category=2&category=3. Mais le serveur ne verra que la dernière valeur, à moins d'utiliser une astuce.

\n

Sur Stack Overflow, la question "How to pass an array within a query string?" a rassemblé des dizaines de milliers de vues. Les développeurs butent dessus chaque jour. Aujourd'hui, nous allons analyser ce sujet de A à Z : je vais vous montrer comment passer correctement un tableau via une URL, comment le traiter côté serveur et quels pièges vous attendent.

\n

Prêts à transformer des paramètres GET chaotiques en une structure de données ordonnée ? C'est parti !

\n\n

Les bases : comment PHP traite une query string

\n

Lorsque vous envoyez une requête GET, PHP remplit automatiquement le tableau superglobal $_GET. Si l'URL contient ?name=John&age=25, alors $_GET ressemblera à ceci :

\n
array(2) {\n  ["name"] => string(4) "John"\n  ["age"] => string(2) "25"\n}
\n

Mais que se passe-t-il si nous essayons de passer plusieurs valeurs avec la même clé ? Écrivons l'URL : ?color=red&color=green&color=blue. Le serveur ne recevra que color=blue. Les autres valeurs seront écrasées, car PHP ne sait pas quoi faire avec des clés en double.

\n

C'est là qu'intervient la syntaxe des crochets, qui a été inventée précisément pour cette tâche.

\n\n

Méthode n°1 : syntaxe des crochets (la plus populaire)

\n

Ajoutez des crochets au nom du paramètre : color[]. Lorsque PHP voit ce motif, il crée automatiquement un tableau. Exemple d'URL :

\n
?color[]=red&color[]=green&color[]=blue
\n

Côté serveur, $_GET contiendra :

\n
array(1) {\n  ["color"] => array(3) {\n    [0] => string(3) "red"\n    [1] => string(5) "green"\n    [2] => string(4) "blue"\n  }\n}
\n

Et voici un exemple de code PHP qui le traite :

\n
<?php\n// URL : example.com?color[]=red&color[]=green&color[]=blue\nif (isset($_GET['color']) && is_array($_GET['color'])) {\n    echo "Couleurs sélectionnées :<br>";\n    foreach ($_GET['color'] as $index => $color) {\n        echo ($index + 1) . ". " . htmlspecialchars($color) . "<br>";\n    }\n}\n?>
\n

Résultat dans le navigateur :

\n
Couleurs sélectionnées :\n1. red\n2. green\n3. blue
\n\n

Clés nommées : quand l'ordre n'a pas d'importance

\n

Parfois, vous devez passer un tableau associatif (clé → valeur). Pour cela, utilisez la syntaxe key[] en spécifiant la clé :

\n
?filter[category]=books&filter[price]=100&filter[in_stock]=1
\n

PHP transformera cela en :

\n
array(1) {\n  ["filter"] => array(3) {\n    ["category"] => string(5) "books"\n    ["price"] => string(3) "100"\n    ["in_stock"] => string(1) "1"\n  }\n}
\n

Traitement côté serveur :

\n
<?php\nif (isset($_GET['filter'])) {\n    $filter = $_GET['filter'];\n    $query = "SELECT * FROM products WHERE 1=1";\n    if (!empty($filter['category'])) {\n        $query .= " AND category = '" . mysqli_real_escape_string($conn, $filter['category']) . "'";\n    }\n    if (!empty($filter['price'])) {\n        $query .= " AND price <= " . (int)$filter['price'];\n    }\n    // ... autres conditions\n}\n?>
\n\n

Méthode n°2 : JSON dans la query string (avancée)

\n

Si le tableau est complexe (imbriqué sur plusieurs niveaux), la syntaxe des crochets devient lourde. Une alternative — passer une chaîne JSON encodée dans l'URL.

\n

Construction de l'URL côté client (JavaScript) :

\n
const data = {\n    colors: ['red', 'green', 'blue'],\n    sizes: ['S', 'M', 'L'],\n    options: {\n        gift_wrap: tr                

Blogs

Book Recommendations