L'array $_GET - dati via URL

Probabilmente avrete già notato che alcuni link presenti nei siti web puntano ad indirizzi (URL) piuttosto complessi che accodano al nome della pagina da visualizzare anche una serie di parametri. Ad esempio il link http://www.phpnews.it/forum/index.php?board=1.0 porta al nostro forum PHP. E' evidente che questo URL si riferisce allo script "index.php" ma notiamo anche il testo "?board=1.0".

Questa parte dell'indirizzo si chiamata query string ed ha lo scopo di conservare delle informazioni da passare allo script chiamato. Tali informazioni, separate dal resto dell'URL attraverso il punto interrogativo, sono presenti sotto forma di coppie chiave=valore. In questo caso quindi alla chiave "board" è associato il valore "1.0". Nell'eventualità si debbano inserire più coppie chiave=valore allora queste saranno separate dal carattere &. Ad esempio:

http://www.miosito.it/index.php?chiave1=valore1&chiave2=valore2

A seguito della richiesta della pagina "index.php" il PHP, prima di eseguirne le istruzioni, legge la query string, decodifica le informazioni in essa contenute e le rende disponibili allo script come elementi di un array dal nome $_GET. La pagina "index.php" avrà quindi a disposizione due elementi nell'array $_GET:

$_GET['chiave1'] di valore 'valore1'

$_GET['chiave2'] di valore 'valore2'

Ciò che accade quindi è molto simile a quanto visto nella scorsa lezione a proposito dei dati inviati attraverso un form.

Con il seguente esempio vedremo come usare la query string per mostrare il testo della notizia selezionata:

<?php
if(!$_GET)
{
    echo 'Seleziona una notizia da leggere: <br><br>';
    echo '<a href="index.php?id_notizia=1">Notizia 1</a> <br>';
    echo '<a href="index.php?id_notizia=2">Notizia 2</a> <br>';
    echo '<a href="index.php?id_notizia=3">Notizia 3</a> <br>';
}
else
{
    $notizie = array(1=>'Questo è il testo della notizia numero 1',
                        'Questo è il testo della notizia numero 2',
                        'Questo è il testo della notizia numero 3');

    $id_notizia = $_GET['id_notizia'];

    echo 'Testo: <br>';
    echo $notizie[$id_notizia] . '<br><br>';
    echo '<a href="index.php">Torna all\'indice</a>';
}
?>

Attenzione, è importante salvare questo script con il nome index.php.

All'inizio dello script viene controllato se c'è qualcosa nell'array $_GET. In caso negativo vengono mostrati 3 links, tutti indirizzati alla pagina index.php ma con il parametro id_notizia nella query string che assume i valori 1, 2 e 3.

Se invece l'array $_GET non è vuoto significa che l'utente ha cliccato uno di questi link. Recuperiamo allora il valore del parametro id_notizia dall'array $_GET e lo usiamo per estrarre dall'array $notizie il testo richiesto.

Quando si utilizza la query string per inviare delle informazioni ad una pagina PHP bisogna tenere presente alcune limitazioni. Infatti essa non può estendersi per più di 255 caratteri ed inoltre può contenere solo lettere, numeri ed il simbolo "_". Per ovviare a questo inconveniente si usa la funzione urlencode che si occupa proprio di sostituire i caratteri illeciti con una loro rappresentazione alternativa.

L'array $_GET, come l'array $_POST, è superglobale ovvero è visibile in qualsiasi punto del nostro script, anche all'interno di una funzione.

Ricordiamo inoltre che la query string può essere facilmente modificata dall'utente, semplicemente agendo sull'indirizzo che appare nel browser. Pertanto è molto importante effettuare tutti i controlli necessari alla verifica dei valori contenuti in $_GET prima che questi vengano effettivamente utilizzati nello script.

1 commento

1 leonardo leonardo luned́ 8 agosto 2011, ore 12:49
Buongiorno,
ho creato da solo come autodidatta il sito per la mia società sportiva (html, css, php, mysql su aruba).

Ho una conoscenza elementare di PHP e mi sono arenato su un problema.

Vorrei che nell'URL della pagina delle news comparisse anche l'ID dell'articolo che si sta leggendo. (L'esempio più chiaro è dato da www.crtjudo.it dove al click su news si apre una pagina con tutte le news paginate. Se si clicca su un particolare articolo anche l'URL della pagina assume il valore dell'ID dell'articolo nel DB).

Riesco a stampare a video tutta la tabella delle mie news ma non riesco ad ottenere questo effetto.

Grazie, spero che vorrai aiutarmi.
Saluti

Leonardo
Effettua l'accesso o registrati per inserire un commento