Wie man ein Array in einer Query String übergibt: vollständige Analyse in PHP

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum ein Array in der URL übergeben? Und warum ist das nicht so einfach, wie es scheint?

\n

Stellen Sie sich vor: Sie schreiben in PHP einen Produktfilter für einen Online-Shop. Der Benutzer wählt mehrere Kategorien, mehrere Farben und eine Preisspanne aus. Wie übergeben Sie all diese Daten über eine GET-Anfrage an den Server? Die naheliegende Lösung ist ?category=1&category=2&category=3. Aber der Server sieht nur den letzten Wert, wenn Sie keinen Trick anwenden.

\n

Auf Stack Overflow hat die Frage "How to pass an array within a query string?" Zehntausende von Aufrufen gesammelt. Entwickler stolpern jeden Tag darüber. Heute analysieren wir dieses Thema von A bis Z: Ich zeige Ihnen, wie Sie ein Array korrekt über eine URL übergeben, wie Sie es auf dem Server verarbeiten und welche Fallstricke auf Sie warten.

\n

Sind Sie bereit, chaotische GET-Parameter in eine saubere Datenstruktur zu verwandeln? Los geht's!

\n\n

Grundlagen: Wie PHP eine Query String verarbeitet

\n

Wenn Sie eine GET-Anfrage senden, füllt PHP automatisch das superglobale Array $_GET. Wenn die URL ?name=John&age=25 enthält, sieht $_GET so aus:

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

Was aber, wenn wir versuchen, mehrere Werte mit demselben Schlüssel zu übergeben? Schreiben wir die URL: ?color=red&color=green&color=blue. Der Server erhält nur color=blue. Die anderen Werte werden überschrieben, weil PHP nicht weiß, was es mit doppelten Schlüsseln tun soll.

\n

Hier kommt die Syntax der eckigen Klammern ins Spiel, die genau für diese Aufgabe entwickelt wurde.

\n\n

Methode Nr. 1: Syntax der eckigen Klammern (die beliebteste)

\n

Fügen Sie dem Parameternamen eckige Klammern hinzu: color[]. Wenn PHP dieses Muster sieht, erstellt es automatisch ein Array. Beispiel-URL:

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

Auf dem Server enthält $_GET:

\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

Und nun ein PHP-Codebeispiel, das dies verarbeitet:

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

Ergebnis im Browser:

\n
Ausgewählte Farben:\n1. red\n2. green\n3. blue
\n\n

Benannte Schlüssel: Wenn die Reihenfolge unwichtig ist

\n

Manchmal muss man ein assoziatives Array (Schlüssel → Wert) übergeben. Dazu verwenden Sie die Syntax key[] mit Angabe des Schlüssels:

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

PHP wandelt dies um in:

\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

Serverseitige Verarbeitung:

\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    // ... restliche Bedingungen\n}\n?>
\n\n

Methode Nr. 2: JSON in der Query String (fortgeschritten)

\n

Wenn das Array komplex ist (mehrstufig verschachtelt), wird die Syntax der eckigen Klammern unhandlich. Eine Alternative ist die Übergabe eines JSON-Strings in URL-kodierter Form.

\n

URL auf dem Client erstellen (JavaScript):

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

Blogs

Buchempfehlungen