Comprendere i Superglobali PHP $_GET
PHP fornisce diversi superglobali che semplificano l'accesso alle informazioni da fonti diverse. Scopri come usare $_GET in modo sicuro.
PHP fornisce diversi superglobali che semplificano la lettura di informazioni da fonti diverse in modo semplice e unificato. Uno di questi è $_GET — l'array che PHP popola con i dati trovati nella query string dell'URL della richiesta corrente. Questo capitolo spiega cosa contiene $_GET, come PHP lo popola, come leggerlo in modo sicuro e quando utilizzarlo al posto di $_POST.
Cos'è $_GET?
$_GET è un superglobale PHP: un array associativo automaticamente disponibile in ogni ambito (all'interno di funzioni, classi e file) senza bisogno della parola chiave global. PHP lo popola con le coppie nome/valore trovate dopo il ? nell'URL della richiesta — la query string. Le chiavi sono i nomi dei parametri e i valori sono il loro contenuto (decodificato dall'URL).
Poiché i dati si trovano nell'URL, sono visibili, aggiungibili ai preferiti e condivisibili. Questo rende $_GET ideale per elementi che un utente potrebbe voler linkare — una query di ricerca, un numero di pagina, un ID prodotto — e una scelta inadatta per qualsiasi cosa sensibile o di grandi dimensioni.
Come funziona $_GET?
Si passano le variabili aggiungendole all'URL come parametri di query, in coppie key=value separate da &:
http://example.com/script.php?greeting=hello&lang=enQuando lo script viene eseguito, PHP analizza la query string e popola $_GET. L'array risultante appare così:
// $_GET after the request above
[
'greeting' => 'hello',
'lang' => 'en',
]I valori sono sempre string (o array — vedi sotto), anche quando sembrano numerici. ?page=2 restituisce la string "2", non l'intero 2, quindi esegui un cast o una validazione prima di fare operazioni aritmetiche.
Come leggere $_GET in modo sicuro
Verifica sempre che una chiave esista prima di usarla — un parametro mancante genera un avviso e restituisce null. Usa isset() o l'operatore di coalescenza null ??:
<?php
// Defensive read with a default value
$greeting = $_GET['greeting'] ?? 'Hi';
echo htmlspecialchars($greeting); // safe to print in HTMLI dati in $_GET provengono direttamente dal client, quindi non fidarti mai di essi. Valida e sanitizza prima dell'uso:
<?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";
}Quando si rimanda l'input dell'utente in una pagina, passarlo attraverso htmlspecialchars() per prevenire il cross-site scripting (XSS). Quando lo si usa in SQL, usare le prepared statement invece di concatenarlo nella query. Consulta filter_input() e filter_var() per il set completo di filtri di validazione.
Recuperare dati di form con GET
Un form HTML il cui method è get invia i suoi campi come parametri di query, che appaiono poi in $_GET:
<form action="search.php" method="get">
<input type="text" name="q" placeholder="Search...">
<button type="submit">Search</button>
</form>Inviare apple reindirizza il browser a search.php?q=apple, e in search.php:
<?php
$query = trim($_GET['q'] ?? '');
if ($query !== '') {
echo 'Results for: ' . htmlspecialchars($query);
} else {
echo 'Please enter a search term.';
}Per una guida più approfondita consulta Gestione dei Form PHP e Validazione dei Form PHP.
Parametri array e raggruppati
Ripeti un nome con [] e PHP raggruppa i valori in un sotto-array — utile per le checkbox e i filtri multi-selezione:
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 | |
|---|---|---|
| Dove risiedono i dati | Query string dell'URL | Corpo della richiesta |
| Visibile nell'URL | Sì | No |
| Aggiungibile ai preferiti / condivisibile | Sì | No |
| Limite di dimensione | Limitato dalla lunghezza dell'URL (~2 KB) | Effettivamente molto più grande |
| Usare per | Ricerche, filtri, paginazione, navigazione | Login, upload di file, tutto ciò che modifica i dati |
Usa GET per la lettura — richieste che non modificano lo stato del server e che l'utente potrebbe voler ripetere o condividere. Usa POST per la scrittura — invio di password, creazione di record o invio di payload di grandi dimensioni. Se hai bisogno di un unico punto che legga da entrambi i metodi, consulta $_REQUEST.
Utilizzi comuni
- Risultati di ricerca — inserisci la query nell'URL così gli utenti possono aggiungere ai preferiti o condividere i risultati.
- Pagine dinamiche — passa un parametro
?id=o?page=per controllare quale contenuto viene visualizzato. - Filtraggio e ordinamento — codifica i filtri attivi nell'URL così lo stato sopravvive a un aggiornamento della pagina.
Conclusione
$_GET offre un modo semplice e unificato per leggere i dati passati nella query string dell'URL. È ideale per richieste condivisibili e di sola lettura come ricerche e paginazione, ma poiché i suoi valori sono visibili e provengono dal client, validali, sanitizzali e effettua l'escape prima dell'uso. Per i dati che modificano lo stato del server o devono rimanere privati, utilizza invece $_POST.