ePrometeusCorsoLinuxLinux
testi articoli
Testi Articoli  Download
Home | Introduzione | Panoramica | Form | Analisi Log | 
CorsoJava è ora Video! Free for all!
Clicca Qui!
Tutorial Perl
FORM IN PERL
INVIARE MAIL DAL WEB
RICHIAMI DI FORM E CGI
STRUTTURA DEL PROGRAMMA
IL PROGRAMMA PRINCIPALE
DECODIFICA DELL'INPUT
VERIFICA DELL'INPUT E INVIO DI UNA MAIL


<<< VERIFICA DELL'INPUT E INVIO DI UNA MAIL

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 &egrave; 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	&Egrave; 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).


ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com