[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 216.   Passaggio di variabili tramite l'HTTP

Fino ad ora sono stati trattati i casi di singole pagine PHP in cui le variabili sono valorizzate, manipolate e visualizzate con l'interpretazione del singolo file. In questo modo l'utente che naviga la pagina non è in grado di interagire con gli script, non può passare dei dati al programma perchè non può editarne il codice. Il protocollo HTTP permette, tramite i marcatori HTML di passare dei dati tra le pagine, il PHP è in grado di ricevere ed elaborare queste informazioni.

Nelle pagine seguenti verranno trattati i metodi di scambio di variabili dando per scontata la conoscenza, come detto in principio, dell'HTML.

L'HTML permette al navigatore di inserire dati tramite il marcatore form che riceve dagli attributi action e method le direttive relative al file che deve ricevere i dati e al modo in cui essi devono esseregli passati. L'attributo method ammette due possibili valori: get e post. Di seguito saranno approfondite le differenze tra i due metodi.

216.1   Metodo get

Quando si sceglie il metodo get le variabili ed il relativo valore vengono fornite allo script destinatario tramite la barra dell'indirizzo del browser.

Il modo migliore per chiarire il concetto è l'utilizzo di un esempio. Verranno realizzati due script, get_1.html e get_2.php. get_1.html invierà i dati contenuti nel form a get_2.php utilizzando il metodo get, get_2.php riceverà i dati, li manipolerà e li visualizzerà in una semplice pagina di saluto. Questo l'indirizzo dell'esempio: <http://www.urcanet.it/brdp/php_manual/esempi/cap_3/get_1.html>

Ecco il codice del file get_1.html:

0        <html>
1        <head>
2                <title> Passaggio del nome! </title>
3        </head>
4       
5        <body>
6       
7        <br>
8               Una semplice pagina HTML che passa nome e cognome ad 
9               uno script PHP che saluterà il navigatore.
10       <br><br>
11      
12       <form method="get" action="get_2.php">
13
14               Dimmi il tuo nome: <input type="Text" name="nome"> <br><br>
15               Ed ora il Cognome: <input type="Text" name="cognome"> <br><br>
16              
17               <input type="Submit" value="Adesso invia i dati in GET &gt;&gt;">
18      
19       </form>
20      
21       </body>
22       </html>

Il primo file invia i due campi di testo al file destinatario get_2.php che riceve due variabili valorizzate con i dati inseriti dal navigatore. Le variabili hanno il nome del campo del form, nell'esempio le variabili sono $nome e $cognome e sono di tipo stringa.

Il codice del secondo script è molto semplice, non fa altro che visualizzare i valori delle due variabili.

0        <html>
1        <head>
2                <title> Pagina di destinazione... </title>
3        </head>
4       
5        <body>
6       
7        Ciao, <br><br>
8       
9        Il tuo nome è: <?=$nome?> <br>
10       e il tuo cognome è: <?=$cognome?>
11      
12  </body>
13  </html>

Figura 216.1. Come appare il form di invio dei dati.

figure/brdp_get_1html

Figura 216.2. Nella barra degli indirizzi è evidenziata la sintassi del metodo get per il passaggio delle variabili.

figure/brdp_get_2php

L'obiettivo di questo esempio è quello di capire come funziona il metodo get, per farlo basta leggere il contenuto della barra degli indirizzi nel browser durante la visualizzazione dello script destinatario. L'indirizzo è simile a:

http://www.urcanet.it/ ... ual/esempi/cap_3/get_2.php?nome=Gianluca&cognome=Giusti

Risulta semplice e intuitivo capire come vengono passate variabili e valori. All'indirizzo della pagina viene aggiunto un carattere ? e di seguito tutte le coppie di variabili e rispettivo valore separate dal =, ad esempio: nome=Gianluca. Le coppie sono poi separate dal carattere &.

216.2   Metodo post

Nel metodo post i dati non vengono visualizzati in nessun modo, essi sono spediti tramite il protocollo HTTP e non sono visibili sul navigatore.

Una semplice verifica può essere eseguita modificando lo script get_1.html nel seguente modo:

0        <html>
1        <head>
2                <title> Passaggio del nome! </title>
3        </head>
4       
5        <body>
6       
7        <br>
8               Una semplice pagina HTML che passa nome e cognome ad 
9               uno script PHP che saluterà il navigatore.
10       <br><br>
11      
12       <form method="post" action="get_2.php">
13
14               Dimmi il tuo nome: <input type="Text" name="nome"> <br><br>
15               Ed ora il Cognome: <input type="Text" name="cognome"> <br><br>
16              
17               <input type="Submit" value="Adesso invia i dati in GET &gt;&gt;">
18      
19       </form>
20      
21       </body>
22       </html>

Salvato come post_1.html è possibile testarne il funzionamento e verificare che nella pagina get_2.php la barra degli indirizzi del programma di navigazione è priva delle coppie di variabili, allo stesso tempo lo script ha funzionato e viene visualizzato il messaggio di saluto correttamente.

Analizzando lo script post_1.html si nota che l'unica modifica è quella all'attributo method del marcatore form.

216.3   Quale metodo scegliere?

Non c'è una regola particolare per scegliere l'uno piuttosto che l'altro metodo. Possiamo dire che se la quantità di dati da inviare è grande è preferibile utilizzare il post. Il protocollo HTTP permette, tramite i form HTML, l'upload di file dall'elaboratore cliente a quello servente, in questi casi è bene utilizzare il metodo post.

Nel file di configurazione del PHP (php.ini) può essere definita sia la dimensione massima dei file che il servente accetterà tramite HTTP, sia la dimensione massima dei dati accettati tramite post. Quest'ultimo valore può essere definito valorizzando la variabile post_max_size nel php.ini.

Quando i dati da scambiare sono pochi e non importa che risultino direttamente visibili si può utilizzare il metodo get, che è comodo anche per quelle situazioni in cui si utilizza spesso il tasto avanti e indietro del navigatore. Le variabili sono memorizzate insieme all'indirizzo e quindi ogni volta che si richiama una pagina ad essa vengono rifornite le variabili e i loro valori. Per rendersi conto di questo basta tenere d'occhio la barra degli indirizzi durante le ricerche su un qualunque motore di ricerca, il 99% di essi passano i dati tramite il metodo get. È altrettanto vero che i dati passati al motore per le ricerche sono decisamente pochi, di solito si tratta di una stringa con dei parametri che il motore aggiunge automaticamente.

216.4   Cosa è cambiato nel PHP versione 4.2

Dalle versioni del PHP 4.2 e successive la gestione delle variabili passate tramite moduli HTML è sensibilmente cambiata. Nel file di configurazione viene valorizzata a vero la variabile track_vars, in questo modo tutte le variabili presenti in un modulo ed inviate ad uno script PHP vengono inserite in un array associativo contenente il nome delle variabile e il relativo valore.

Ad esempio nel caso dello script get_2.php visto nelle sezioni 216.1 e 216.2 si avrebbe la necessità di distinguere il metodo di invio. Più precisamente nel caso di un invio tramite metodo get il file get_2.php dovrebbe essere così modificato:

0  <html>
1  <head>
2    <title> Pagina di destinazione... </title>
3  </head>
4
5  <body>
6
7    Ciao, <br><br>
8
9    Il tuo nome è: <?=$HTTP_GET_VARS["nome"]?> <br>
10   e il tuo cognome è: <?=$HTTP_GET_VARS["cognome"]?>
11
12 </body>
13 </html>

Le differenze sono lampanti e riguardano le righe 9 e 10. L'interprete prende il valore ricevuto dalla variabile predefinita $HTTP_GET_VARS che come detto in precedenza è un array associativo

Nel caso di un invio tramite metodo post il programma andrebbe così modificato:

0  <html>
1  <head>
2    <title> Pagina di destinazione... </title>
3  </head>
4
5  <body>
6
7    Ciao, <br><br>
8
9    Il tuo nome è: <?=$HTTP_POST_VARS["nome"]?> <br>
10   e il tuo cognome è: <?=$HTTP_POST_VARS["cognome"]?>
11
12 </body>
13 </html>

Questo tipo di gestione delle variabili può sembrare prolissa ma evita confusioni all'interprete e costringe il programmatore a specificare la variabile su cui operare.

Ovviamente se si hanno pagine sviluppate secondo le vecchie specifiche basterà settare a falso la variabile track_vars nel file di configurazione del PHP, in questo modo tutto dovrebbe funzionare correttamente.

Programmare in PHP --- Copyright © 2001-2002 Gianluca Giusti --  brdp @ urcanet.it

Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome passaggio_di_variabili_tramite_l_http.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]