Una delle principali possibilità offerte dai linguaggi di scripting lato server è quella di generare contenuti (dinamicamente) sulla base delle richieste degli utenti.
Questa interattività si realizza soprattutto attraverso le variabili GET e POST che consentono, appunto, agli utenti di passare al server le loro richieste o preferenze attraverso i form (i classici moduli html) o semplici QueryString.
Esistono, infatti, due diversi modi per passare dati al server: il metodo POST (generalmente usato nei form) ed il metodo GET (generalmene usato nelle QueryString). Vediamoli separatamente.
Con il
metodo GET i dati vengono passati direttamente all'interno dell'indirizzo web (URL) della pagina, il quale si presenterà accompagnato da un punto di domanda (
?) seguito dai dati organizzati in coppie nome/valore (qualora vi siano diverse coppie queste saranno legate tra loro dal simbolo
&). Facciamo un esempio di utilizzo del metodo GET realizzando una semplice QueryString:
http://www.sito.com/automobili.php?marca=fiat&modello=panda
Nell'esempio qui sopra abbiamo ipotizzato di avere una pagina dinamica chiamata "automobili.php" in grado di visualizzare informazioni relativamente a diverse autovetture sulla base di due parametri (marca e modello).
Il contenuto della pagina "automobili.php" cambierà, ovviamente, ogni volta che varieranno i valori dei parametri marca e modello.
PHP memorizza i dati passati attraverso la QueryString all'interno della variabile $_GET. Nello specifico del nostro esempio faremo così per recuperarne il valore all'interno della pagina "automobili.php":
<?
//Recupero il valore del parametro "tipo"
$marca_auto = $_GET['tipo'];
//Recupero il valore del parametro "modello"
$modello_auto = $_GET['modello'];
//Ora stampo semplicemente a video il risultato
echo "Hai scelto una " . $marca_auto . " modello " . $modello_auto;
?>
Come avrete notato, per recuperare i dati passati dalla QueryString ho usato $_GET accompagnato da parentesi quadre al cui interno ho scritto (tra gli apici) il nome del parametro da recuperare (come vedremo tra breve useremo la stessa sintassi anche con $_POST).
Il
metodo POST viene utilizzato per inviare i dati ad una applicazione PHP tramite i form (moduli html).
Prima di parlare nello specifico della variabile $_POST conviene fare un piccolo ripasso di HTML e vedere (brevemente) come funzionano i moduli.
il tag <form> viene sempre accompagnato da due attributi fondamentali - "method" e "action" - vediamo a cosa servono:
- l'attributo "method" determina, appunto, il metodo con cui i dati saranno inviati al server; può avere come valore sia GET (che genera una QueryString) che POST;
- l'attributo "action" ha come valore il percorso dell'applicazione a cui saranno inviati i dati.
Facciamo un esempio:
<form method="post" action="applicazione.php">
Tuo Nome: <input type="text" name="nome">
<input type="submit" name="submit" value="invia">
</form>
Diversamente dal metodo GET, il metodo POST spedisce i dati in maniera non direttamente visibile per l'utente, attraverso la richiesta HTTP che il browser invia al server.
Tornando all'esempio visto sopra (il form HTML), per recuperare il valore del campo "nome" all'interno della nostra applicazione PHP useremo la variabile $_POST. Ecco il codice del file "applicazione.php" cui punta il nostro form:
<?
//Recupero il valore del parametro "nome"
$nome_utente = $_POST['nome'];
//Ora stampo semplicemente a video il risultato
echo "Ciao " . $nome_utente;
?>
Nota: c'è da dire che, modificando l'impostazione "register_globals" su "php.ini" sarebbe possibile anche recuperare i dati in maniera più semplice. Infatti, se "register_globals" è "on" potremo recuperare i dati da form e querystring semplicemente utilizzando il nome del campo preceduto dal simbolo del dollaro.
Nell'esempio di prima, ad esempio, sarebbe stato sufficiente scrivere $nome per recuperare il valore del relativo campo del form!
Si noti, tuttavia, che per ragioni di sicurezza è bene mantenere su off lo stato di questa impostazione.
Attenzione: gli array $_GET e $_POST sono stati introdotti nella versione 4.1.0 di PHP. In precedenza venivano utilizzati i corrispondenti $HTTP_GET_VARS e $HTTP_POST_VARS. Questi array sono disponibili anche nelle versioni attuali di PHP, ma il loro uso è sconsigliato, ed è presumibile che in futuro scompariranno.