Switch to American English
Giovanni's logo
Mappa la stringa di input nelle variabili del programma
questo significa Versione 2
indice analitico
M
power search
blue line
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:

  1. ZhbGetInput
  2. ZhbCountAllVars
  3. ZhbGetVarDetails