PHP-Superglobals $_GET verstehen
PHP stellt mehrere Superglobals bereit, die den Zugriff auf URL-Daten vereinfachen. Erfahren Sie, wie $_GET funktioniert und wie Sie es sicher einsetzen.
PHP stellt mehrere Superglobals bereit, die das Lesen von Informationen aus verschiedenen Quellen auf einfache und einheitliche Weise erleichtern. Eine davon ist $_GET — das array, das PHP mit den Daten aus dem Query-String der URL der aktuellen Anfrage füllt. Dieses Kapitel erklärt, was $_GET enthält, wie PHP es befüllt, wie man es sicher ausliest und wann man es statt $_POST verwenden sollte.
Was ist $_GET?
$_GET ist ein PHP-Superglobal: ein assoziatives array, das in jedem Gültigkeitsbereich (innerhalb von Funktionen, Klassen und Dateien) automatisch verfügbar ist, ohne dass das global-Schlüsselwort benötigt wird. PHP füllt es mit den Name/Wert-Paaren, die nach dem ? in der Anfrage-URL stehen — dem Query-String. Die Schlüssel sind die Parameternamen und die Werte deren (URL-dekodierter) Inhalt.
Da die Daten in der URL gespeichert sind, sind sie sichtbar, als Lesezeichen speicherbar und teilbar. Das macht $_GET ideal für Dinge, auf die ein Benutzer verlinken möchte — eine Suchanfrage, eine Seitenzahl, eine Produkt-ID — und eine schlechte Wahl für alles Sensible oder Umfangreiche.
Wie funktioniert $_GET?
Variablen werden übergeben, indem sie als Query-Parameter an die URL angehängt werden, in key=value-Paaren, die durch & getrennt sind:
http://example.com/script.php?greeting=hello&lang=enWenn das Skript ausgeführt wird, parst PHP den Query-String und befüllt $_GET. Das resultierende array sieht wie folgt aus:
// $_GET after the request above
[
'greeting' => 'hello',
'lang' => 'en',
]Die Werte sind immer strings (oder arrays — siehe unten), auch wenn sie wie Zahlen aussehen. ?page=2 liefert den string "2", nicht die Ganzzahl 2 — daher vor arithmetischen Operationen umwandeln oder validieren.
$_GET sicher auslesen
Prüfen Sie immer, ob ein Schlüssel vorhanden ist, bevor Sie ihn verwenden — ein fehlender Parameter löst eine Warnung aus und gibt null zurück. Verwenden Sie isset() oder den Null-Koaleszenz-Operator ??:
<?php
// Defensive read with a default value
$greeting = $_GET['greeting'] ?? 'Hi';
echo htmlspecialchars($greeting); // safe to print in HTMLDaten in $_GET kommen direkt vom Client, daher niemals blind vertrauen. Validieren und bereinigen Sie die Daten vor der Verwendung:
<?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";
}Wenn Benutzereingaben auf einer Seite ausgegeben werden, führen Sie sie durch htmlspecialchars(), um Cross-Site-Scripting (XSS) zu verhindern. Bei der Verwendung in SQL nutzen Sie Prepared Statements anstatt sie in die Abfrage zu verketten. Weitere Validierungsfilter finden Sie unter filter_input() und filter_var().
Formulardaten mit GET abrufen
Ein HTML-Formular mit method="get" übermittelt seine Felder als Query-Parameter, die dann in $_GET erscheinen:
<form action="search.php" method="get">
<input type="text" name="q" placeholder="Search...">
<button type="submit">Search</button>
</form>Das Absenden von apple leitet den Browser zu search.php?q=apple weiter, und in search.php:
<?php
$query = trim($_GET['q'] ?? '');
if ($query !== '') {
echo 'Results for: ' . htmlspecialchars($query);
} else {
echo 'Please enter a search term.';
}Eine ausführlichere Erklärung finden Sie unter PHP-Formularverarbeitung und PHP-Formularvalidierung.
Array- und gruppierte Parameter
Wiederholen Sie einen Namen mit [] und PHP gruppiert die Werte in ein Unter-array — praktisch für Checkboxen und Mehrfachauswahlfilter:
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 | |
|---|---|---|
| Wo die Daten liegen | URL-Query-String | Request-Body |
| In der URL sichtbar | Ja | Nein |
| Als Lesezeichen speicherbar / teilbar | Ja | Nein |
| Größenbeschränkung | Durch URL-Länge begrenzt (~2 KB) | Effektiv viel größer |
| Verwendung für | Suchen, Filter, Paginierung, Navigation | Logins, Datei-Uploads, alles, was Daten ändert |
Verwenden Sie GET zum Lesen — für Anfragen, die den Server-Zustand nicht ändern und die der Benutzer wiederholen oder teilen möchte. Verwenden Sie POST zum Schreiben — beim Übermitteln von Passwörtern, Erstellen von Datensätzen oder Senden großer Nutzdaten. Wenn Sie einen einzigen Einstiegspunkt benötigen, der von beiden Methoden liest, siehe $_REQUEST.
Häufige Verwendungszwecke
- Suchergebnisse — die Suchanfrage in der URL speichern, damit Benutzer ihre Ergebnisse als Lesezeichen speichern oder teilen können.
- Dynamische Seiten — einen
?id=- oder?page=-Parameter übergeben, um zu steuern, welcher Inhalt gerendert wird. - Filtern und Sortieren — die aktiven Filter in der URL kodieren, damit der Zustand nach einem Seitenneuladen erhalten bleibt.
Fazit
$_GET bietet eine einfache, einheitliche Möglichkeit, Daten aus dem Query-String der URL zu lesen. Es eignet sich besonders für teilbare, schreibgeschützte Anfragen wie Suchen und Paginierung. Da die Werte jedoch sichtbar sind und vom Client stammen, sollten Sie sie vor der Verwendung stets validieren, bereinigen und escapen. Für Daten, die den Server-Zustand ändern oder privat bleiben müssen, verwenden Sie stattdessen $_POST.