|
La funzione CheckForm si
occupa di verificare che l'input sia corretto. Sono innumerevoli i
controlli che si possono fare: innanzitutto presenza di tutti i cambi
obbligatori, poi che certi campi soddisfino effettivamente certi
criteri. Infatti in listato 4 possiamo osservare che la
subroutine CheckForm si occupa di controllare una per una le
variabili di input e di ritornare un appropriato messaggio di errore
se qualcosa non va.
1 ### Verifica l'input della form.
2 # input: %WWW
3 # return: '' se ok, altrimenti il messaggio di errore
4 sub CheckForm {
5 return "Nome non specificato."
6 unless $WWW{'name'};
7 return "Indirizzo non specificato."
8 unless $WWW{'address'};
9 return "Numero di telefono non specificato."
10 unless $WWW{'phone'};
11 return "Il numero di telefono non è numerico."
12 unless $WWW{'phone'} =~ /\d+/;
13 return '';
14 }
15
16 ### Dopo la verifica invia una mail con i dati immessi.
17 # input: %WWW
18 sub ProcessForm {
19
20 # costruisce la mail
21 $_="
22 Nome......: $WWW{'name'}
23 Indirizzo.: $WWW{'address'}
24 Telefono..: $WWW{'phone'}
25 ";
26 # comunica con l'utente
27 print "<title>DEMO FORM</title>
28 <h1>DEMO FORM</h1>
29 È stata inviata questa mail:
30 <pre>
31 $_
32 </pre>
33 <hr>Grazie.
34 ";
35
36 # send mail
37 open(MAIL, "|mail info\@ditta.com -s 'DEMO FORM'");
38 print MAIL;
39 close MAIL
40 }
Listato 4
I primi controlli sono semplicemente di presenza dei campi. Come
esempio di controllo più sofisticato abbiamo considerato la
verifica che il numero di telefono sia numerico. Naturalmente si
tratta di un esempio: i numeri di telefono possono contenere barre,
trattini, parentesi eccetera ma non abbiamo volutamente complicato
l'esempio. Comunque in Perl si può facilmente controllare
nella sintassi del numero di telefono che le parentesi siano
bilanciate!
Una piccola osservazione su questo
modo di procedere: verificare l'input dopo che l'utente ha immesso
completamente il modulo non è certo il massimo
dell'interattività. Sarebbe meglio utilizzare delle verifiche
in loco, utilizzando per esempio il JavaScript. Dopodiché si
procedere all'elaborazione della form nel modo descritto in questo
articolo. Però siccome non tutti i browser supportano il
JavaScript, l'input va verificato in ogni caso: anche se abbiamo
opposto una barriera anti-errore in JavaScript, se l'utente utilizza
il Microsoft Explorer i dati scorretti possono arrivare lo stesso.
L'ultima subroutine, la ProcessForm,
semplicemente costruisce una mail, la stampa al video e la invia.
Utilizza una interessante caratteristica del Perl che consente
mandare in esecuzione un programma e di comunicare con esso in input
o in output (ma non contemporaneamente).
La open che ha come filename
una stringa che comincia con il carattere | apre una pipe,
simile alla pipe del DOS quando si esegue un comando come:
DIR
| MORE
Il comando viene eseguito in modo
che l'input del programma venga preso da ciò che noi
scriveremo nel filehandle MAIL (listato 4 riga 37). In
questo caso si attiva il comando Unix che serve per inviare mail:
questo comando aspetta sullo standard input la mail da inviare.
Infatti si provvede subito e si esegue print che manda il testo della
mail. Osserviamo che la open su comandi funziona anche in output: se
scriviamo qualcosa come:
open(LS,
"ls|");
si legge dal filehandle LS
l'output del comando eseguito. Nei casi in cui vogliamo instaurare un
colloquio in input/output con un comando esterno, non bastano più
le primitive del Perl ma sono disponibili nella libreria standard la
chat2.pl (perl4.036) e la IPC::Open2.pm
(perl5.001).
|