Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 61 di 67
  • livello intermedio
Indice lezioni

Le variabili GET e POST

Come recuperare e gestire i dati inviati dall'utente attraverso una pagina PHP
Come recuperare e gestire i dati inviati dall'utente attraverso una pagina PHP
Link copiato negli appunti

La principale peculiarità del web dinamico, come abbiamo detto all'inizio di questa guida PHP, è la possibilità di variare i contenuti delle pagine in base alle richieste degli utenti. Questa possibilità si materializza attraverso i meccanismi che permettono agli utenti, oltre che di richiedere una pagina ad un web server, anche di specificare determinati parametri che saranno utilizzati dallo script PHP per determinare quali contenuti la pagina dovrà mostrare. Come esempio, possiamo immaginare una pagina il cui scopo è quello di visualizzare le caratteristiche di un dato prodotto, prelevandole da un database nel quale sono conservati i dati di un intero catalogo. Nel momento in cui si richiama la pagina, si dovrà specificare il codice del prodotto che deve essere visualizzato, per consentire allo script di prelevare dal database i dati di quel prodotto e mostrarli all'utente.

In alcuni casi, i dati che devono essere trasmessi allo script sono piuttosto numerosi: pensiamo ad esempio ad un modulo di registrazione per utenti, nel quale vengono indicati nome, cognome, indirizzo, telefono, casella e-mail ed altri dati personali. In questo caso lo script, dopo averli ricevuti, andrà a salvarli nel database.

In questa lezione non ci occuperemo di come vengono salvati o recuperati i dati da un database, ma del modo in cui PHP li riceve dall'utente. Esistono due sistemi per passare dati ad uno script: il metodo GET e il metodo POST.

Il metodo GET di PHP

Il metodo GET consiste nell'accodare i dati all'indirizzo della pagina richiesta, facendo seguire il nome della pagina da un punto interrogativo e dalle coppie nome/valore dei dati che ci interessano. Nome e valore sono separati da un segno di uguale. Le diverse coppie nome/valore sono separate dal segno '&'. Quindi, immaginando di avere la pagina prodotto.php che mostra le caratteristiche di un prodotto passandole il codice e la categoria del prodotto stesso, diciamo che, per visualizzare i dati del prodotto A7 della categoria 2, dovremo richiamare la pagina in questo modo:

<a href="prodotto.php?cod=a7&cat=2">

La stringa che si trova dopo il punto interrogativo, contenente nomi e valori dei parametri, viene detta query string. Quando la pagina prodotto.php viene richiamata in questo modo, essa avrà a disposizione, al suo interno, le variabili $_GET['cod'] (con valore 'a7') e $_GET['cat'] (con valore '2'). Infatti i valori contenuti nella query string vengono memorizzati da PHP nell'array $_GET, che è un array superglobale in quanto è disponibile anche all'interno delle funzioni.

Quindi, per tornare all'esempio del catalogo, possiamo immaginare di avere una pagina nella quale mostriamo una tabella con il nome di ogni prodotto su una riga, e, di fianco, il link che ci permette di visualizzare le caratteristiche di quel prodotto. In ogni riga, quindi, questo link richiamerà sempre la pagina prodotto.php, valorizzando ogni volta i diversi valori di 'cod' e 'cat'.

Il metodo POST di PHP

Il metodo POST viene utilizzato con i moduli: quando una pagina HTML contiene un tag <form>, uno dei suoi attributi è method, che può valere GET o POST. Se il metodo è GET, i dati vengono passati nella query string, come abbiamo visto prima. Se il metodo è POST, i dati vengono invece inviati in maniera da non essere direttamente visibili per l'utente, attraverso la richiesta HTTP che il browser invia al server.

I dati che vengono passati attraverso il metodo POST sono memorizzati nell'array $_POST. Anche questo array, come $_GET, è un array superglobale. Quindi, per fare un esempio attraverso un piccolo modulo:

<form action="elabora.php" method="post">
<input type="text" name="nome">
<input type="checkbox" name="nuovo" value="si">
<input type="submit" name="submit" value="invia">
</form>

Questo modulo contiene semplicemente una casella di testo che si chiama 'nome' e una checkbox che si chiama 'nuovo', il cui valore è definito come 'sì'. Poi c'è il tasto che invia i dati, attraverso il metodo POST, alla pagina elabora.php.

Questa pagina si troverà a disposizione la variabile $_POST['nome'], contenente il valore che l'utente ha digitato nel campo di testo; inoltre, se è stata selezionata la checkbox, riceverà la variabile $_POST['nuovo'] con valore 'si'. Attenzione però: se la checkbox non viene selezionata dall'utente, la variabile corrispondente risulterà non definita.

Abbiamo visto quindi, brevemente, in che modo recuperare i dati che gli utenti ci possono trasmettere. 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 è attiva ('on'), oltre agli array visti sopra avremo anche delle variabili globali che contengono direttamente i valori corrispondenti. Ad esempio, nel primo esempio avremmo a disposizione la variabile $cod e la variabile $cat, nel secondo avremmo la variabile $nome e la variabile (eventuale) $nuovo. Fino a qualche tempo fa, erano in molti a lavorare in questo modo, perchè il valore di register_globals, di default, era attivo, e quindi buona parte dei programmatori PHP, soprattutto agli inizi, trovavano più naturale utilizzare il sistema più immediato.

PHP register_globals

A partire dalla versione 4.2.0 di PHP, fortunatamente, il valore di default di register_globals è stato cambiato in off, e gli sviluppatori di PHP sconsigliano di rimetterlo ad on per gravi problemi di sicurezza. Questo perchè, utilizzando gli array superglobali $_GET e $_POST, si rende il codice più chiaro e anche più sicuro. Se vi dovesse capitare di utilizzare degli script già fatti e doveste notare dei malfunzionamenti, potrebbe dipendere dal fatto che tali script utilizzano le variabili globali invece degli array superglobali, ed il vostro register_globals è a off.

Un'ultima annotazione: gli array $_GET e $_POST sono stati introdotti nella versione 4.1.0 di PHP. In precedenza, gli stessi valori venivano memorizzati negli array corrispondenti $HTTP_GET_VARS e $HTTP_POST_VARS, che però non erano superglobali. Questi array sono disponibili anche nelle versioni attuali di PHP, ma il loro uso è sconsigliato, ed è presumibile che in futuro scompariranno.

Le variabili superglobali definite automaticamente da PHP non permettono solamente di accedere ai parametri passati alla pagina, ma esistono variabili che permettono di accedere ad altri valori molto importanti.

Variabile server in PHP

La variabile $_SERVER contiene informazioni sul server corrente, recuperate attraverso Apache o estratte dagli header della pagina valorizzati dal browser dell'utente che sta navigando. Spesso i valori contenuti in questo array associativo vengono utilizzati per comprendere da dove proviene una richiesta, rilevare l'indirizzo IP che identifica il PC da cui l'utente è acceduto alla nostra pagina oppure conoscere il path di base dell'applicativo.

Le variabili $_COOKIE e $_SESSION (che verranno analizzate successivamente in modo più approfondito) contengono rispettivamente i valori dei cookie e delle sessioni valide per una determinata pagina. I valori vengono acceduti utilizzando come chiave il nome del cookie/sessione che si decide interrogare.

La variabile PHP files

La variabile $_FILES è molto importante perché contiene informazioni su tutti i file inviati alla pagina attraverso un form. L'array $_FILES ha una struttura che permette di recuperare (sempre attraverso il nome del parametro, come per le variabili $_POST e $_GET) il nome del file caricato, le sue dimensioni ed il nome del file temporaneo salvato su disco sul quale è possibile operare.

Ti consigliamo anche