Esempio di stringa di input:
cgiinp01=George&cgiinp02=Brown
Una volta che il CGI ha letto la stringa di input
inviata dal browser remoto, deve capire la richiesta.
Per farlo, occorre qualche routine che faccia lo scan
della stringa di input per tutte le possibili keyword
in input e ne salvi i valori dentro variabili del programma,
dimodochè il programma possa poi elaborare
la specifica richiesta.
Questa operazione di "spezzettamento" della stringa
di input ha il nome di "parsing".
Il service program di CGIDEV2 fornisce le seguenti sottoprocedure di parsing:
1. Procedura di parsing "zhbGetVar"
La procedura di parsing zhbgetvar
consente di reperire uno alla volta i singoli parametri
della stringa di input copiandoli in campi definiti
dal programma.
La procedura di parsing
zhbgetvarupper
consente altresì di convertire in maiuscolo
i parametri ricevuti.
La procedura di parsing
zhbgetvarlower
consente invece di convertire in minuscolo
i parametri ricevuti.
L'esempio seguente ilustra come usare zhbGetVar in un programma CGI:
* Definizione dei prototipi e della DS standard per i codici errore delle API
/copy CGIDEV2/qrpglesrc,prototypeb
/copy CGIDEV2/qrpglesrc,usec
* Numero di variabili di input ricevute
DnbrVars s 10i 0
*
* Query string ricevuta
Dsavedquerystring...
D s 32767 varying
*
 * Variabili inviate dal browser
D custname s 40
D emailadd s 40
D state s 2
... ecc. ...
* Acquisisci il buffer di input spedito dal browser del client
C eval nbrVars =
C zhbgetinput(savedquerystring:qusec)
* Fai il parsing delle variabili di input:
* - nome cliente
C eval custname = zhbgetvar('custname')
* - indirizzo email
C eval emailadd = zhbgetvar('emailadd')
* - stato
C eval state = zhbgetvar('state')
|
Per un esempio completo vedi l'origine del programma
TEMPLATE3.
2. Procedura di parsing zhbGetVarPtr
La procedura di parsing zhbgetvarptr
restituisce un pointer ad una data variabile di input.
Questo č utile quando la lunghezza dela variabile di input puņ superare la lunghezza massima (32767)
supportata da ZhbGetVar. In questo caso la massima lunghezza puņ essere 64000.
Se il pointer contiene il valore *null, questo significa che la variabile di input non č stata trovata,
oppure che la sua lunghezza č 0.
L'esempio seguente ilustra come usare zhbGetVarPtr in un programma CGI:
* Definizione dei prototipi e della DS standard per i codici errore delle API
/copy CGIDEV2/qrpglesrc,prototypeb
/copy CGIDEV2/qrpglesrc,usec
* Numero delle variabili ricevute
DnbrVars s 10i 0
* Query string ricevuta
Dsavedquerystring...
D s 32767 varying
*
* Pointer restituito da zhbGetVarPtr
D ReturnVarP s *
* Variabili usate da zhbGetVarPtr
D varnamein s 50
D occurrence s 10i 0
D varLenOut s 10i 0
... etc. ...
* Acquisisci il buffer di input spedito dal browser del client
C eval nbrVars =
C zhbgetinput(savedquerystring:qusec)
* Acquisici il pointer per la variabile di input denominata 'longstring':
C eval occurrence = 1
C eval ReturnVarP = zhbGetVarPtr('longstring':
C occurrence:
C varLenOut) |
Nota.
Non si usi questa procedura per leggere un file upload-ato dal browser.
Vedi Uploading PC files.
3. Altre procedure di parsing
- ZhbCountAllVars:
restituisce il numero di presenze di tutte le variabili
nella stringa di input
(ovviamente bisogna aver prima eseguito la procedura ZhbGetInput)
- ZhbGetVarDetails:
l'utente specifica il numero della variabile
(entro il range ottenuto da
ZhbCountAllVars) e riceve le
informazioni seguenti:
nome della variabile,
numero di ripetizione di questa variabile,
indicatore (car. 0/1) di variabile trovata.
D nbrInpVars s 10i 0
D ThisVarVal s 1000a
D ThisOccur s 10i 0
D ThisVarName s 50
D ThisVarOccur s 10i 0
D FoundInd s n
* Acquisisco il buffer di input spedito dal browser del client
C eval nbrVars =
C zhbgetinput(savedquerystring:qusec)
* Ricevo il numero totale di variabili di input (duplicati compresi) trasmesse dal browser
C eval nbrInpVars = ZhbCountAllVars
* Ricevo informazioni dettagliate su ciascuna variabile di input
C if nbrInpVars > 0
C 1 do nbrInpVars ThisOccur
C eval ThisVarVal =
C ZhbGetVarDetails(ThisOccur:
C ThisVarName:
C ThisVarOccur:
C FoundInd)
C enddo
C endif |
4. Ricevere in nomi delle variabilli di input
Si puņ presentare il caso in cui il programma CGI non sa a priori i nomi delle variabili di input
e quindi se li deve trovare.
In un caso simile, il problema puņ essere risolto eseguendo in sequenza le procedure seguenti:
- ZhbGetInput
- ZhbCountAllVars
- ZhbGetVarDetails
|