back to top

Le variabili GET e POST di PHP

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 anche 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.

In pratica, attraverso GET e POST è possibile "raccogliere" gli input degli utenti i quali possono essere utilizzati per "indirizzare" il comportamento dei nostri script. 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.

La variabile $_GET

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 che, contenendo più valori, è classificabile come un array. Quest’array è di tipo associativo perché ad ogni valore (non necessariamente numerico) è associata appunto una chiave uguale al nome passato per URL.

Nello specifico del nostro esempio faremo così per recuperarne il valore all’interno della pagina "automobili.php":

<?php
//Recupero il valore del parametro "tipo"
$marca_auto = $_GET['marca'];

//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). Da questa sintassi possiamo intuire che $_GET (come $_POST) è un array superglobale che, come tale, può essere richiamata in qulunque punto del nostro codice, anche all’interno di funzioni e metodi.

La querystring non svolge quindi soltanto una funzione di veicolo per i parametri sfruttando un meccanismo proprio del protocollo HTTP, ma anche di assegnazione di valori che potranno essere elaborati da una qualsiasi applicazione.

La variabile $_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 e vedere (brevemente) come funzionano i form HTML.

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:

<?php
//Recupero il valore del parametro "nome"
$nome_utente = $_POST['nome'];

//Ora stampo semplicemente a video il risultato
echo "Ciao " . $nome_utente;
?>

register_globals

Settando 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.

Il vecchio $HTTP_GET_VARS…

Gli array superglobali $_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 del tutto.

Pubblicità
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).