|
Il meccanismo delle form non è
particolarmente interattivo: l'utente compila il modulo e poi lo
invia, premendo un bottone sulla pagina. Il nostro script viene
allora attivato e legge i dati che sono stati inseriti, li elabora e
decide cosa fare. Nel nostro caso le possibilità sono due: o
il modulo è corretto, oppure contiene errori. Se l'utente ha
riempito correttamente tutti i campi possiamo procedere ad inviare la
mail, altrimenti dobbiamo richiedere che la form sia compilata
correttamente.
Se decidiamo di far ricompilare la form, la dobbiamo ristampare con
un messaggio di errore che dica quale campo è sbagliato.
Notiamo che sarebbe tedioso re-immettere tutto da capo ogni volta che
si commette un errore (specialmente con un modulo con decine di
campi!). Quindi quantomeno ci dobbiamo preoccupare di ristampare la
form con i dati che l'utente ha appena immesso per dargli modo di
correggerli. Se invece la form è corretta possiamo procedere,
e presumibilmente oltre a inviare la posta mostreremo un messaggio al
nostro utente che dica che la mail è stata inviata.
Facciamo qualche osservazione su come deve essere organizzato il
nostro programma. Innanzitutto l'HTML che contiene la form deve
essere generato dal programma: la prima pagina e le successive sono
simili ma a parte la prima, le successive devono per forza essere
elaborate da programma (dobbiamo produrre output in base a ciò
che l'utente immette e non lo possiamo sapere a priori - quindi non
possiamo usare pagine fisse).
In particolare il nostro programma è
autocontenuto, nel senso che è un file solo che genera tutte
le possibili pagine HTML inviate all'utente. E' un documento
“attivo”, che si comporta in maniera diversa interagendo
con l'utente.
I programmi CGI possono agire solo
in seguito ad una submit o quando viene seguito un link che li
attiva. Nel breve tempo in cui sono attivi (non possono fare
aspettare molto l'utente...) devono fare tutto il loro lavoro e,
cosa molto importante, non si ricordano nulla delle invocazioni
precedenti. Infatti un programma CGI nasce all'attivazione e muore
quando ha prodotto i suoi risultati.
L'unico modo di mantenere un filo
logico in una sequenza di HTML è quello di comportarsi come
una macchina a stati. Lo stato viene mantenuto dalle pagina HTML
prodotta, in particolare utilizzando i campi di INPUT di tipo
HIDDEN. I campi HIDDEN sono campi di una form come
tutti gli altri solo che non generano nessun elemento di interfaccia
e non sono modificabili. Il loro scopo è di passare
informazioni tra una invocazione e l'altra di programmi CGI. Ad ogni
invocazione un programma CGI effettua una transizione di stato: legge
lo stato, esamina l'azione che l'utente ha svolto in quel particolare
stato, calcola il nuovo stato, produce una pagina HTML che mostra i
risultati e memorizza il nuovo stato utilizzando i campi HIDDEN.
|