Definizione e Validazione di Form Web

Transcript

Definizione e Validazione di Form Web
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
JAVASCRIPT
DEFINIZIONE E VALIDAZIONE DI MODULI WEB (FORM)
Dispensa corso DHTML a cura di Francesco Leonetti
[email protected]
Copyright 2002, EspertoWeb - www.espertoweb.it
1
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
INDICE
INTRODUZIONE, 3
DEFINIZIONE DI UN MODULO, 5
DEFINIZIONE DEI CAMPI DI UN MODULO, 9
CONTROLLO DEI CAMPI DI UN MODULO, 14
Copyright 2002, EspertoWeb - www.espertoweb.it
2
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
INTRODUZIONE
Con questa dispensa voglio spiegare come si costruiscono pagine come questa:
http://www.espertoweb.net/dhtml/esempi/registrazione.htm
Le pagine web generalmente offrono contenuti all’utente.
Con DHTML abbiamo visto come sia possibile costruire i contenuti in modo dinamico ed
interattivo (livelli, stili, animazioni, onclick, etc…).
Ma alle volte è utile consentire anche all’utente di trasmettere contenuti al sito ovvero al
responsabile del sito.
Il modo più semplice ed immediato per realizzare questa funzione è attraverso il link: “scrivici”
associato ad un email, come in questo esempio:
<A HREF=”mailto:[email protected]”>Scrivici</a>
Il click sul link “scrivici” realizzato in quel modo farà aprire automaticamente il programma di
posta elettronica dell’utente e presenterà la finestra di editing di un nuovo messaggio con
precompilato il campo email del destinatario (in questo esempio “[email protected]).
L’utente scriverà l’oggetto e il testo del messaggio e quindi lo invierà.
In pratica il link di tipo “mailto:” è una sorta di scorciatoia alla funzione “Scrivi Messaggio” del
programma di posta elettronica.
Questo metodo va benone ed è infatti diffusissimo su praticamente tutti i siti web.
Ci possono essere però casi in cui non si intende ricevere un generico messaggio attraverso
l’email, ma si vuole vincolare l’utente a fornire un insieme di dati strutturati, alcuni dei quali
addirittura obbligatori.
Pensiamo ad esempio ad un sito che fornisce servizio di assistenza e supporto tecnico via web.
Per garantire la massima efficienza del servizio e delle comunicazioni si vogliono limitare allo
stretto necessario le interazioni tra l’utente e l’operatore.
Per fare ciò si possono preventivamente chiedere all’utente dei dati necessari alla diagnosi di
un qualunque problema in aggiunta alla descrizione del problema specifico che l’utente vuole
porre.
Ad esempio si deve sempre indicare il sistema operativo che si usa, la sua versione, la
configurazione del computer, etc.. e infine la generica descrizione del problema.
Se in un sito del genere si lasciasse solo la possibilità di inviare un generico email si potrebbero
avere scambi di messaggi come questo:
Utente: “come mai non riesco ad aprire il file musica.rm che mi avete inviato?”
Operatore: “su quale computer sta cercando di aprire questo file?”
Utente: “uso un Macintosh”;
Operatore: “che versione di sistema operativo usa?”
Utente: “Apple OS X”;
Operatore: “che versione di realplayer usa?”
Utente: “Realplayer 8 Basic per OS 9”;
Copyright 2002, EspertoWeb - www.espertoweb.it
3
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Operatore: “non è la versione adatta, deve scaricare Realplayer 8 Basic per OS X”
Se invece si fornisse all’utente su una pagina web un “modulo” da compilare di questo tipo:
Nome: ______________________________
Cognome: ___________________________
Configurazione Computer: ___________________________
Sistema Operativo: ___________________________
Versione Sistema Operativo: ___________________________
Descrizione del problema: ___________________________
_________________________________________________
_________________________________________________
_________________________________________________
e quindi con un click si potesse inviare (sempre per email, per ora) questo modulo
all’operatore, lo scambio di messaggi sarebbe riducibile a:
(l’operatore riceve un email corrispondente ad un modulo compilato via web con i seguenti dati
Nome: Ciccio
Cognome: Polenta
Configurazione Computer: Apple Macintosh G4
Versione Sistema Operativo: OS X
Descrizione del problema: non riesco ad aprire il file musica.rm che mi avete inviato)
L’operatore risponde:
Operatore: “probabilmente non ha scaricato una versione di realplayer compatibile con il
sistema operativo, verifichi di avere realplayer 8 Basic per OS X”
Utente: “grazie, problema risolto scaricando RealPlayer 8 Basic per OS X”.
Mizzica! :)
I moduli web possono inoltre servire per raccogliere informazioni anagrafiche di un utente che
vuole rimanere informato via email delle novità del sito, etc. etc..
In tutti questi casi c’è la necessità di costruire un modulo che consenta una raccolta strutturata
e controllata di dati invece del generico campo aperto dell’email.
In questi casi si rende utile il tag FORM per la definizione del modulo e i vari tag INPUT per la
definizione degli elementi del modulo (detti “campi”).
Ancora pià utile si rende Javascript e il DHTML per la validazione immediata dei valori immessi
nei campi in modo da evitare per esempio che come CAP si indichi un valore non numerico, o
che si lasci in bianco il campo del “Cognome” (se ritenuto necessario), etc. etc.
All’inizio quando fu introdotto DHTML fu considerato utile solo per validare i form!
Copyright 2002, EspertoWeb - www.espertoweb.it
4
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Vediamo quindi come sfruttare questa utilità.
DEFINIZIONE DI UN MODULO
Il modulo (in inglese: form) si definisce con il tag <FORM> ed evidentemente si chiude con il
tag </FORM>.
Il tag <FORM> prevede una serie di argomenti opzionali:
NAME
nome identificativo del modulo, torna utile quando via Javascript si dovranno
modificare o verificare i valori degli elementi contenuti
METHOD
indica il modo con cui i dati devono essere trasmessi al sito, può essere
POST o GET (lo spiego meglio in seguito)
ACTION
indica l’azione che deve essere compiuta quando l’utente conferma
l’invio del modulo
ENCTYPE
indica il formato con cui i dati devono essere trasmessi
Non è necessario indicare tutti questi parametri, anzi è addirittura possibile specificarne
alcuno, in questo caso il tag <FORM> assume solo significato “coreografico” :)
Nel tag <FORM> si possono inoltre inserire codici Javascript per intercettare eventi quali
“onclick”, etc…, in particolare torna utile intercettare l’evento “onSubmit” che si verifica
quando l’utente conferma l’invio del modulo e consente quindi di chiamare una funzione
Javascript prima di procedere con quanto specificato nel parametro ACTION.
Per comprendere meglio il significato dei parametri METHOD, ACTION e ENCTYPE è bene
definire meglio a quale scopo e in quale contesto operativo il tag FORM è stato introdotto nel
codice HTML.
Noi qui ne vedremo un uso limitato all’invio “strutturato” di una email (l’ACTION cioè sarà solo
del tipo mailto:[email protected]) ma in realtà i dati raccolti tramite FORM vengono più
spesso inviati ad una “procedura” sul server che si incarica di prendere i dati, elaborarli ed
eventualmente conservarli in un database oltre che fornire un qualche feedback all’utente.
Ma il DHTML non ci consente di mettere le mani sul server per costruire “procedure” che siano
in grado di trattare i dati che provengono da FORM.
Con DHTML possiamo costruire le FORM, validare i dati e al più farceli spedire via email.
Copyright 2002, EspertoWeb - www.espertoweb.it
5
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Lo schema seguente spiega il contesto in cui operano le ACTION gestibili in DHTML e quelle che
invece richiedono smanettamenti sul lato server (su cui i corsisti di PHP e mySQL sguazzano).
<FORM ACTION=”mailto:[email protected]”>
ACTION=”mailto:[email protected]”
modulo web (form)
A: [email protected]
browser web
client email
nuova email
PC dell’utente
In DHTML cioè il massimo che possiamo fare è invocare il programma di posta elettronica
dell’utente inviando ad esso i dati e l’email del destinatario. Dovrà essere poi l’utente, che
troverà comunque tutti i campi compilati, a confermare l’invio effettivo dell’email.
Con DHTML non possiamo uscire dal lato utente.
Nella situazione più tipica invece i dati del FORM vengono inviati non al client di posta
elettronica ma ad una procedura che risiede sul server e di cui nell’ACTION si riporta l’indirizzo:
<FORM ACTION=”http://www.espertoweb.net/modulo.php”>
ACTION=” http://www.espertoweb.net/modulo.php”
modulo web (form)
browser web
feedback
PC dell’utente
modulo.php
database
SERVER
Copyright 2002, EspertoWeb - www.espertoweb.it
6
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
In questo esempio si vede bene come il FORM continua a servire per la costruzione del
modulo, ma i dati vengono trasmessi ad un file sul server il quale si occuperà di elaborarli e
fornire una eventuale pagina di feedback all’utente del tipo “Grazie! dati ricevuti”.
Il DHTML continua ad essere utile anche in questo caso per fare in modo che i dati che
vengono trasmessi siano già in qualche modo controllati.
Inutile ad esempio far fare al server il lavoro di verifica della compilazione dei campi obbligatori
o dell’inserimento di valori corretti.
Con DHTML possiamo verificare noi se il campo “Cognome” è stato compilato senza scomodare
il server che magari dopo aver verificato che manca il cognome deve fornire una pagina di
feedback che invita a ritornare sul modulo.
Insomma, non facciamo fare al server cose che possiamo fare noi. Lui ce ne sarà grato (e
anche l’utente che risparmia tempo del modem).
Se questo schema ci è chiaro possiamo ora meglio comprendere anche il significato dei
parametri METHOD e ENCTYPE.
Il parametro METHOD indica in che modo i “campi” del FORM devono essere inviati alla
procedura indicata dall’ACTION (sia essa una procedura sul server o il programma di posta
elettronica). I modi possibili sono due: POST e GET.
Il metodo POST “impacchetta” i dati e li trasmette alla procedura dell’ACTION come unico
blocco. Spetta poi alla procedura aprire il pacchetto e ricostruire la struttura originaria dei dati.
Il metodo GET invece aggrega la struttura dei dati e i rispettivi valori immessi dall’utente in
coda all’indirizzo della procedura indicata dall’ACTION. Sarà sempre compito della procedura
recuperare dal proprio indirizzo questi dati.
Per vedere un esempio di FORM che trasmette dati con METHOD=”get” andiamo per esempio
al seguente indirizzo: http://www.google.it.
E’ il famoso motore di ricerca. Il campo in cui possiamo scrivere il nostro criterio di ricerca è
proprio un campo di una FORM al cui ACTION è associato il nome di una procedura sul server.
Provate a scrivere “espertoweb” come criterio di ricerca e quindi cliccate sul pulsante “Cerca
con Google”.
Ora osservate non tanto il contenuto della pagina quanto l’indirizzo della pagina che vi è stata
restituita: http://www.google.it/search?q=espertoweb&hl=it&lr=
Analizzando questo indirizzo possiamo dedurre che la procedura indicata nell’ACTION del
precedente FORM si trova sul server “http://www.google.it” e si chiama “search”, in pratica il
suo indirizzo completo è: “http://www.google.it/search”.
Il “?” che segue indica che il precedente FORM usa METHOD=”get” per trasmettere i dati. Ed
infatti troviamo il nome del campo (in questo caso il campo si chiama “q”) seguito dal valore
inserito dall’utente (“=espertoweb”), il carattere “&” separa i dati degli altri campi
eventualmente inviati dal FORM. In questo caso troviamo il campo “hl” che ha valore “it”
(“hl=it”) e il campo “lr” a valore nullo (“lr=”). Intuisco che il campo “hl” servirà per indicare
alla procedura la lingua dell’interfaccia (it dovrebbe stare per “italiana”). Invece “lr” non ho
idea di cosa sia. Per capirlo dovrei analizzare il codice della procedura “search” ma questo non
è consentito se non all’autore della procedura che ha possibilità di mettere le mani sul server.
Sulla base di tali dati la procedura “search” ha costruito dinamicamente il contenuto della
pagina che stiamo osservando.
La domanda ora è: quando usare POST e quando GET?
Per i nostri scopi (DHTML) è opportuno usare sempre e solo il METHOD=”post”. E’ addirittura
obbligatorio se uno dei campi del modulo è del tipo “testo libero”.
Copyright 2002, EspertoWeb - www.espertoweb.it
7
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Il metodo GET ha infatti il vantaggio di essere più efficiente del fratello POST, ma ha un limite
imposto dalla lunghezza dell’indirizzo di una pagina, oltre 256 caratteri non si può andare.
Chiarito (spero) cosa si intende per METHOD e appreso che per i nostri scopi useremo sempre
METHOD=”post” vediamo ora cosa si intende per ENCTYPE.
Normalmente questo parametro non viene indicato. Lo si indica solo quando si vuole definire
esplicitamente il formato con cui i dati devono essere trasmessi (al programma di posta
elettronica se si usa ACTION=mailto:etc o alla procedura sul server) e viene preso in
considerazione sole se si è impostato METHOD=”post”. Se si è impostato METHOD=”get” tutto
ciò che specifichiamo come ENCTYPE viene ignorato.
La specifica del formato è conforme alla convenzione MIME la cui trattazione esula dagli scopi
del corso e della dispensa.
A noi ci basta sapere che se si vuole fare in modo che i dati vengano rappresentati nel formato
più chiaro e intellegibile da occhio umano, perché magari devono essere inseriti nel corpo della
email conseguente a ACTION=mailto:, allora dobbiamo indicare ENCTYPE=”text/plain”.
Se in qual caso non indicassimo questo formato rischieremmo di ricevere i dati rappresentati in
modo piuttosto criptico.
In tutti gli altri casi normalmente va benone il formato standard e quindi non è necessario
specificare il parametro ENCTPYE.
In definitiva ecco come potrebbe aprirsi il tag FORM per definire un modulo i cui dati devono
essere trasmessi per esempio al mio email:
<FORM ACTION=”mailto:[email protected]” METHOD=”post” ENCTYPE=”text/plain”>
….
….
</FORM>
(l’ordine con cui sono inseriti gli argomenti del tag FORM è indifferente).
In seguito vedremo come si completa il tag per fare in modo che i dati vengano controllati
prima di procedere con l’ACTION al seguito del click di conferma dell’utente.
Ora vediamo cosa si può mettere al posto di quei puntini di sospensione per costruire gli
effettivi elementi del modulo: i campi.
Copyright 2002, EspertoWeb - www.espertoweb.it
8
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
DEFINIZIONE DEI CAMPI DEL MODULO
Dopo il tag FORM può seguire un qualunque codice HTML tranne che un altro tag FORM.
E’ possibile così costruire ad esempio una tabella, metterci delle immagini etc... ma non è
possibile inserire all’interno di un tag FORM un altro tag FORM.
Tutti i tag che definiscono dei campi di INPUT vengono associati al tag FORM aperto sino a
quando si incontra il suo </FORM>.
Se un campo di INPUT viene inserito dopo il tag </FORM>, il campo corrispondente non viene
considerato parte del FORM e non verrà trasmesso tra i dati dell’ACTION.
I tag che definiscono campi di un FORM sono:
INPUT
TEXTAREA
SELECT
Il tag INPUT a sua volta si distingue in vari tipi specificato dall’argomento TYPE.
Il tag INPUT non ha un corrispondente </INPUT>, mentre è previsto </TEXTAREA> e
</SELECT>.
Tutti i tag che definiscono i campi del FORM prevedono l’argomento NAME il quale serve sia ad
etichettare il dato che viene trasmesso con l’ACTION, sia per controllare e/o impostarne il
valore via Javascript.
Passiamo in rassegna i vari valori di TYPE per il tag INPUT:
<INPUT TYPE=”text”>
Definisce un campo atto a contenere testo e/o numeri.
Prevede i seguenti argomenti opzionali:
SIZE
indica la larghezza del campo
MAXLENGTH indica il numero massimo di caratteri ammessi per quel campo.
Se l’utente digita il numero di caratteri specificato da quel valore
la pagina si rifiuta di inserirne altri.
Esempio:
Nome: <INPUT TYPE=”text” NAME=”nome_utente” SIZE=”30” MAXLENGTH=”100”>
<INPUT TYPE=”password”>
E’ identico a TYPE=”text” solo che i caratteri immessi non vengono resi visibili nel campo ma
sostituiti da un pallino.
Esempio:
Password: <INPUT TYPE=”password” NAME=”pwd_utente” SIZE=”30” MAXLENGTH=”100”>
Copyright 2002, EspertoWeb - www.espertoweb.it
9
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
<INPUT TYPE=”radio”>
Si usa quando si deve far selezionare all’utente uno ed uno solo tra due o più valori
simultaneamente proposti.
In corrispondenza dal tag viene mostrato un pallino, inzialmente bianco.
Quando l’utente clicca sul pallino, questi viene evidenziato e i pallini del tipo “radio” che hanno
lo stesso nome di quello cliccato vengono resi bianchi.
In pratica un input di tipo “radio” non è mai da solo, deve esserci almeno un altro con il suo
stesso nome. Quando il modulo viene inviato viene fatto corrispondere al nome comune dei
vari tag input di tipo “radio” il valore corrispondente al pallino in quel momento selezionato.
Parametri opzionali:
VALUE
indica il valore che deve essere fatto corrispondere al campo se questo
pallino è selezionato
CHECKED
se presente il pallino viene mostrato selezionato, normalmente
quando la pagina viene caricata tutti i pallino sono deselezionati (bianchi)
Esempio:
Sesso: <INPUT TYPE=”radio” NAME=”sesso_utente” VALUE=”M” CHECKED> M
<INPUT TYPE=”radio” NAME=”sesso_utente” VALUE=”F”> F
Notate come i due “radio button” abbiano lo stesso nome “sesso_utente”.
Il CHECKED sul primo “radio button” fa sì che la pagina quando viene caricata mostri quel
pallino già preselezionato.
Quando l’utente invierà il modulo verrà fatto corrispondere al campo “sesso_utente” il valore
corrispondente all’argomento VALUE del pallino in quel momento selezionato.
E’ possibile definire nello stesso modulo più gruppi di “radio button”.
I “radio button” dello stesso gruppo si distinguono dal NAME comune.
<INPUT TYPE=”checkbox”>
Si usa quando si vuole consentire all’utente di selezionare un valore affiancato ad un box “di
spunta”.
L’utente clicca sul box per “spuntarlo” e allo stesso modo può togliere la “spunta”. Se il campo
rimane “spuntato” il valore corrispondente viene passato quando il modulo è confermato.
Parametri opzionali:
VALUE
indica il valore che deve essere fatto corrispondere al campo se questo
box è spuntanto. Se non si inserisce viene fornito il valore “on”.
CHECKED
se presente il box viene mostrato già spuntato, normalmente
quando la pagina viene caricata tutti i box non sono spuntati.
Esempio:
Interessi:
<INPUT TYPE=”checkbox” NAME=”libri”> Libri
<INPUT TYPE=” checkbox” NAME=”musica”> Musica
Copyright 2002, EspertoWeb - www.espertoweb.it
10
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
<INPUT TYPE=”hidden”>
“Hidden” significa “nascosto. La definizione di campi nascosti si usa per consentire il passaggio
alla procedura che elabora il modulo (mailto: o una procedura sul server) un valore di servizio
nascosto all’utente ma che è utile per la procedura.
Ad esempio potrei passare la data in cui il modulo è stato compilato (non lasciando quindi che
sia l’utente a scriverla) o il nome del modulo o altre informazioni automatiche.
Parametri opzionali:
VALUE
indica il valore che deve essere fatto corrispondere al campo.
Esempio:
<INPUT TYPE=”hidden” NAME=”nome_modulo” VALUE=”registrazione al sito”>
Quando il form verrà confermato sarà disponibile anche il campo “nome_modulo” impostato
con valore “registrazione_sito”. Dell’esistenza di questo campo l’utente non è consapevole.
<SELECT>
Si usa questo tipo di campo quando si vuole consentire all’utente la selezione di un solo valore
tra un insieme predefinito di valori mostrati in una tendina “pull-down” e non attraverso dei
“radio button”.
Concettualmente infatti la selezione di un valore effettuata via SELECT è identica a quella fatta
cliccando su un pallino di una lista di “radio button”.
La differenza è data dal fatto che i valori opzionali vengono mostrati in una tendina che l’utente
può “tirare giù” (pull-down) cliccando sul campo.
I possibili valori da cui far scegliere si indicano attraverso il tag OPTION, il quale ha senso solo
all’interno di un tag SELECT.
Vediamo un esempio:
Indica la tua zona di provenienza:
<SELECT NAME=”zona”>
<OPTION>Nord
<OPTION>Centro
<OPTION>Sud
<OPTION>Isole
</SELECT>
Notate che il tag <OPTION> non richiede obbligatoriamente un </OPTION>.
L’utente cliccando sul campo vedrà la lista di opzioni e potrà selezionarne una.
Se non viene specificato in OPTION un VALUE, verrà passata alla procedura come valore del
campo SELECT il testo immediatamente successivo al tag <OPTION> selezionato. Se invece si
vuole esplicitare un valore diverso dall’etichetta mostrata all’utente, è possibile includere il
parametro VALUE all’interno del tag OPTION, come in questo esempio:
Indica la tua zona di provenienza:
<SELECT NAME=”zona”>
<OPTION VALUE=”n”>Nord
<OPTION VALUE=”c”>Centro
<OPTION VALUE=”s”>Sud
<OPTION VALUE=”i”>Isole
</SELECT>
Copyright 2002, EspertoWeb - www.espertoweb.it
11
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
In questo esempio l’utente vedrà la stessa lista di opzioni del precedente esempio, ma quando
avrà selezionato una voce, il valore corrispondente non sarà quello indicato dall’etichetta
visibile all’utente ma quello indicato dal parametro VALUE. Sarà questo valore ad essere
passato alla procedura in corrispondenza del campo dal nome indicato dal parametro NAME del
tag SELECT.
Se l’utente cioè seleziona “Centro”, il campo “zona” avrà valore “c” in questo esempio, avrà
valore “Centro” nell’esempio precedente.
Se non si specifica diversamente il primo valore della lista di opzioni viene visualizzato
all’utente come valore di default per quel campo. E’ possibile derogare questo comportamento
indicando esplicitamente il valore che deve essere preselezionato di default, come in questo
esempio:
Indica la tua zona di provenienza:
<SELECT NAME=”zona”>
<OPTION>Nord
<OPTION>Centro
<OPTION SELECTED>Sud
<OPTION>Isole
</SELECT>
il parametro SELECTED nel tag OPTION farà in modo che il valore “Sud” verrà mostrato come
opzione preselezionata di default per il campo “zona”.
<TEXTAREA>
Si usa questo tipo di campo quando si vuole offrire all’utente la possibilità di scrivere un testo
libero composto da più righe.
Parametri opzionali:
ROWS
altezza del campo (numero di righe)
COLS
larghezza del campo (numero di colonne)
Se il valore immesso dall’utente nel campo supera il numero di righe indicato, verrà
automaticamente visualizzata una barra di scorrimento.
Il valore del campo <TEXTAREA> è rappresentato dal testo incluso tra il tag <TEXTAREA> e il
suo </TEXTAREA>
Esempio:
Note e commenti:<br>
<TEXTAREA COLS="40" ROWS="10" NAME="note">scrivi qui un tuo commento</TEXTAREA>
Verrà mostrato un campo ampio 40 colonne e alto 10 righe al cui interno sarà contenuto il
testo “scrivi qui un tuo commento” a cui l’utente può sovrapporsi per scrivere il proprio.
Tale testo verrà passato come valore al campo “note” che rappresenta il NAME del campo
TEXTAREA.
Copyright 2002, EspertoWeb - www.espertoweb.it
12
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
<INPUT TYPE=”submit”>
Il campo di tipo “submit” rappresenta il pulsante da far premere per confermare l’invio del
modulo.
Parametri opzionali:
VALUE
rappresenta l’etichetta da mostrare sul pulsante.
Esempio:
<INPUT TYPE=”submit” VALUE=”Invia”>
Verrà mostrato il tipico pulsante grigio con su scritto “Invia”.
Il click su questo pulsante effettuerà l’esecuzione della ACTION indicata nel tag FORM, a meno
che in esso non sia contenuto anche un onSubmit=”….”. In questo caso, prima verrà
eseguito quanto riportato in onSubmit e, se tutto è andato bene, si procede con quanto
indicato da ACTION.
<INPUT TYPE=”reset”>
E’ analogo al pulsante di tipo “submit” solo che il suo click non produce l’esecuzione della
ACTION ma una semplice “pulitura” del contenuto dei campi.
Utile per consentire all’utente di annullare quanto ha scritto sui campi per ricominciare da
capo.
Parametri opzionali:
VALUE
rappresenta l’etichetta da mostrare sul pulsante.
Esempio:
<INPUT TYPE=”reset” VALUE=”Annulla”>
Verrà mostrato il tipico pulsante grigio con su scritto “Annulla”.
Il click su questo pulsante svuoterà i campi del modulo facendo restare sulla stessa pagina.
Copyright 2002, EspertoWeb - www.espertoweb.it
13
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
CONTROLLO DEI CAMPI DI UN MODULO
Una volta costruito un modulo, ogni suo elemento è riferibile via Javascripot attraverso un
riferimento DOM.
Consideriamo ad esempio il seguente modulo:
<form ACTION="mailto:[email protected]" METHOD="POST" ENCTYPE="text/plain"
name="modulo_dati" onsubmit="controlla_dati();return tutto_ok">
<input type=”hidden” name=”nome_modulo” value=”registrazione”>
Nome: <input type="text" name="nome" size="40"><br>
Cognome: <input type="text" name="cognome" size="40"><br>
E-Mail: <input type="text" name="email" size="40" onFocus="mostra('guida_email');"
onBlur="nascondi('guida_email');"><br>
Età: <input type="text" name="eta" size="40"><br>
Sesso: <input type="radio" name="sesso" value="M">Maschio <input type="radio"
name="sesso" value="F">Femmina<br>
Interessi: <br>
<input type="checkbox" name="sport">Sport <input type="checkbox" name="libri">Libri
<input type="checkbox" name="cinema">Cinema <input type="checkbox"
name="musica">Musica<br>
Zona di provenienza: <select name="zona">
<option value="Nord">Nord
<option value="Centro">Centro
<option value="Sud">Sud
<option value="Isole">Isole
</select><br>
Note e commenti: <br>
<textarea cols="40" rows="10" name="note">scrivi qui un tuo commento</textarea>
<input type="submit" name="invia" value="Invia">
</form>
Come vedete è stato definito un modulo di nome “modulo_dati” (parametro NAME del tag
FORM) e ad ogni campo è stato fornito un nome.
I singoli campi sono riferibili in questo modo:
nome_modulo.nome_campo.proprietà_campo
dove a nome_modulo bisogna sostituire il nome dato al modulo (parametro NAME del tag
FORM), e a nome_campo il nome dato al campo (parametro NAME del tag INPUT o SELECT o
TEXTAREA), a proprietà_campo la particolare proprietà di quell’elemento che ci interessa
riferire. In genere la proprietà più riferita è il valore del campo, che è dato dalla sua proprietà
value.
Nel modulo dell’esempio precedente il valore del campo “cognome” è riferibile come:
modulo_dati.cognome.value
il valore del campo “note” come:
modulo_dati.note.value
Un discorso a parte meritano i campi di tipo “checkbox” e “radio”.
Copyright 2002, EspertoWeb - www.espertoweb.it
14
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Per verificare lo stato di un box di spunta (checkbox) si deve riferire la proprietà checked del
campo corrispondente.
Ad esempio:
modulo_dati.libri.checked
se la proprietà è true, vuol dire che il box “libri” è “spuntato”, altrimenti è stato lasciato in
bianco.
Per i radio button (i pallini) la cosa è analoga, tranne che il nome del campo identifica un array
e non una variabile singola.
Se ho ad esempio una serie di pallini (campi di INPUT TYPE=”radio”) che sono tutti dello stesso
nome (come deve essere) per vedere quale pallino è cliccato, controllo la proprietà checked,
del pallino corrispondente. Tale pallino è riferibile come elemento dell’array che definisce il
campo, numerando gli elementi partendo da zero.
Ad esempio:
modulo_dati.sesso[0].checked
indica lo stato del primo pallino dei due pallini chiamati “sesso” (quindi indica lo stato del
pallino con VALUE=”M”)
analogamente
modulo_dati.sesso[1].checked
indica lo stato del secondo pallino dei due pallini chiamati “sesso” (quindi indica lo stato del
pallino con VALUE=”F”)
e cos’ via…
Bene, ora che sappiamo come riferire gli elementi di un modulo grazie al DOM e a Javascript,
possiamo procedere con la validazione dei campi prima della conferma del suo invio.
Questa cosa è realizzata inserendo nel tag FORM l’intercettamento dell’evento onSubmit:
onsubmit="controlla_dati();return tutto_ok"
controlla_dati() è una funzione definita nella sezione HEAD e che andremo tra un po’ a
scoprire.
Quando l’utente clicca sul pulsante di tipo “submit” prima di eseguire quanto indicato dal
parametro ACTION (che in questo esempio prevede l’invio dei dati del modulo ad un email,
chiamando il client di posta elettronica dell’utente) verrà eseguita la funzione controlla_dati().
Come vedete subito dopo c’è un “return tutto_ok”.
tutto_ok è una variabile globale (definita anch’essa nello script della sezione HEAD) introdotta
per indicare se l’esito del controllo dei dati è andato a buon fine. Se tutto è andato bene
tutto_ok avrà valore true, altrimenti sarà false.
Con l’istruzione return tutto_ok viene restituito al modulo l’esito dell’elaborazione di
onSubmit. Se l’esito è negativo non viene eseguita l’ACTION e tutto rimane come stava.
E’ importante specificare questo valore di “return” perché altrimenti dopo aver eseguito quanto
indicato da onsubmit verrebbe comunque attivata l’ACTION indipendentemente dall’esito della
funzione “controllo_dati”
Copyright 2002, EspertoWeb - www.espertoweb.it
15
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Prima di procedere con l’analisi della funzione “controllo_dati” vi faccio notare la presenza nel
tag INPUT del campo e-mail della gestione di due eventi nuovi: onFocus e onBlur:
E-Mail: <input type="text" name="email" size="40" onFocus="mostra('guida_email');"
onBlur="nascondi('guida_email');">
l’evento onFocus viene generato quando l’utente clicca sul campo in questione.
L’evento onBlur viene generato quando l’utente lascia il campo, cliccando per esempio da
qualche altra parte.
Con questo esempio ho voluto mostrare come sia possibile, intercettando questi due eventi,
eseguire azioni Javascript che possano guidare l’utente nella compilazione del modulo.
Vedete infatti che ho specificato in onFocus il richiamo della funzione mostra(‘guida_email’)
che non è altro che una funzione che visualizza un livello che ho chiamato ‘guida_email’
inzialmente tenuto nascosto (guardate la dispensa sui livelli se qualcosa vi sfugge).
Analogamente in corrispondenza di onBlur chiamo una funzione che ha il compito di
nascondere il livello dato come parametro.
Vediamo subito dunque come sono scritte queste funzioni e la funzione controlla_dati e come
tutta la pagina web si realizza.
Copyright 2002, EspertoWeb - www.espertoweb.it
16
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Ecco quanto contenuto nella sezione HEAD della pagina di esempio per la definizione delle
variabili globali e delle funzioni Javascript:
<script language="JavaScript">
var tutto_ok = false;
function controlla_dati() {
//controllo la validità dei campi:
var errore=false;
var msg='';
if (modulo_dati.nome.value=="") {
msg = msg + 'Devi inserire il nome\n';
errore=true;
}
if (modulo_dati.cognome.value=="") {
msg = msg + 'Devi inserire il cognome\n';
errore=true;
}
if (modulo_dati.email.value=="") {
msg = msg + 'Devi inserire un email\n';
errore=true;
} else {
if (modulo_dati.email.value.indexOf ('@', 0) == -1) {
msg = msg + "hmmm... controlla meglio l'email, non mi sembra
valido...\n";
errore=true;
}
}
if (isNaN(modulo_dati.eta.value) || modulo_dati.eta.value=="" ) {
msg = msg + "Devi inserire un'età\n";
errore=true;
};
if (!modulo_dati.sesso[0].checked && !modulo_dati.sesso[1].checked) {
msg = msg + "Devi indicare il sesso\n";
errore=true;
};
if (!modulo_dati.sport.checked && !modulo_dati.libri.checked &&
!modulo_dati.cinema.checked && !modulo_dati.musica.checked) {
msg = msg + "Devi indicare almeno un interesse\n";
errore=true;
};
var commenti=modulo_dati.note.value.toLowerCase();
if ((commenti.indexOf('schifo',0) != -1) || (commenti.indexOf(‘brutt’,0) != -1)) {
msg = msg + "dai.. non può farti così schifo questo modulo... :)\n";
errore=true;
};
Copyright 2002, EspertoWeb - www.espertoweb.it
17
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
if (errore) {
alert(msg);
tutto_ok=false;
} else {
tutto_ok=true;
};
}
function mostra(livello) {
var oggetto_livello=document.all[livello];
oggetto_livello.style.visibility="visible";
}
function nascondi(livello) {
var oggetto_livello=document.all[livello];
oggetto_livello.style.visibility="hidden";
}
</script>
Dunque spiego prima la logica generale, dopo entro nei dettagli.
Innanzitutto fuori dalle funzioni dichiaro la variabile globale tutto_ok
var tutto_ok=false;
inzialmente impostata a valore false, perché assumo con un velo di pessimismo che all’inizio le
cose non siano a posto :)
Il significato di questa variabile dovrebbe essere chiaro, abbiamo detto è il valore di questa
variabile che l’onSubmit restituisce subito dopo aver chiamato la funzione “controlla_dati” e
sulla base della quale si stabilisce se l’ACTION del FORM debba essere eseguita o meno.
Nella funzione controlla_dati, introduco un’altra variabile logica, chiamata errore la quale
servirà ad indicare se durante le varie verifiche di validità dei valori dei campi ci sia stato
qualche valore non ammissibile. Qui, per compensazione, sono ottimista e assumo che all’inizio
non ci siano errori:
var errore=false;
Oltre a rilevare se ci sia stato o meno un errore, mi piace fornire all’utente un’indicazione
precisa e completa del campo contenente un valore non ammesso o lasciato vuoto.
A questo scopo definisco un’altra variabile che chiamo msg, alla quale di volta volta
concatenerò una stringa corrispondente al messaggio che voglio comunicare all’utente a
seguito dell’errore. All’inizio questa stringa è vuota:
var msg=’’;
Tutto ciò che segue non fa altro che verificare i valori dei campi ed eventualmente impostare la
variabile errore a false e concatenare alla variabile msg il relativo messaggio.
Dopo questo blocco di verifica sui campi, con un’istruzione if verifico se la variabile errore è
true allora mostro con un alert il messaggio da dare all’utente e imposto la variabile globale
tutto_ok a false (in modo da inibire l’esecuzione dell’ACTION del FORM), altrimenti imposto la
variabile globale tutto_ok a true.
Copyright 2002, EspertoWeb - www.espertoweb.it
18
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
In pratica possiamo mostrare lo schema logico della funzione in questo modo:
function controlla_dati() {
var errore=false;
var msg='';
/*
ISTRUZIONI CHE VERIFICANO LA VALIDITA’ DEI VALORI DEI CAMPI
QUESTE ISTRUZIONI IMPOSTANO IL VALORE DELLA VARIABILE
errore PER INDICARE SE CI SIA STATO O MENO QUALCOSA CHE NON VA
E RIPORTANDO NELLA VARIABILE msg IL DETTAGLIO DI QUELLO CHE NON
E’ ANDATO.
*/
if (errore) {
alert(msg);
tutto_ok=false;
} else {
tutto_ok=true;
};
}
Ok, ora vediamo come il blocco intermedio verifica la validità dei campi.
Per verificare l’obbligatorietà di compilazione dei campi di tipo “text” non si deve fare altro che
controllare che la proprietà “value” del campo non sia vuota. Insomma che l’utente ci abbia
scritto qualcosa.
E’ quello che fanno i seguenti if:
if (modulo_dati.nome.value=="") {
msg = msg + 'Devi inserire il nome\n';
errore=true;
}
if (modulo_dati.cognome.value=="") {
msg = msg + 'Devi inserire il cognome\n';
errore=true;
}
Se il value del campo cognome del modulo modulo_dati è nullo (==””) allora imposto a
true la variabile errore (per indicare che qualcosa è andato storto) e concateno alla variabile
msg la stringa corrispondente al messaggio relativo che voglio comunicare all’utente. La
stringa termina con il carattere speciale \n per fare sì che l’eventuale successiva stringa venga
mostrata a capo e non in sequenza.
E così, via procedo in modo analogo per controllare l’esistenza di un valore in tutti quei campi
che ho stabilito debba essere obbligatorio compilare per confermare l’invio del modulo.
Copyright 2002, EspertoWeb - www.espertoweb.it
19
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Per controllare il valore del campo email ho voluto andare oltre la verifica della sua semplice
presenza, ma addirittura verificare se l’email indicato è sintatticamente valido.
Il controllo di sintassi di un’email è un po’ più complesso di quello qui presentato.
Sintatticamente infatti in un email devono essere riconoscibili:
account_utente@dominio_server
dove dominio_server a sua volta si struttura in:
nome_dominio.suffisso_dominio
Ma non voglio qui complicarmi troppo la vita, mi accontento di verificare che nell’email ci sia
almeno il carattere ‘@’, perché se non c’è quello allora necessariamente l’email non sarà
valido. E’ pur vero che non è sufficiente che ci sia ‘@’ per garantire la validità sintattica di un
email, ma per ora accontentiamoci di questo. Sempre meglio di niente :)
Tra l’altro un email potrebbe essere sintatticamente valido ma corrispondente a nessun utente
(ad esempio scrivo: gennarino_esposito@casa_mia.it). Questo tipo di verifiche evidentemente
non sono neanche fattibili via Javascript.
Analizziamo dunque il dettaglio della verifica del campo email:
if (modulo_dati.email.value=="") {
msg = msg + 'Devi inserire un email\n';
errore=true;
} else {
if (modulo_dati.email.value.indexOf ('@', 0) == -1) {
msg = msg + "hmmm... controlla meglio l'email, non mi sembra
valido...\n";
errore=true;
}
}
Il primo if controlla se il valore del campo sia nullo e allora in questo caso abbiamo già un
errore e si dice all’utente di non fare troppo il bischero e scrivere un email. Se altrimenti il
primo if è andato bene non ci accontentiamo, con un secondo if verifico se nel valore c’è il
carattere ‘@’.
Qui abbiamo una cosa nuova: indexOf.
indexOf è un ‘metodo’ degli oggetti di tipo stringa. E’ in pratica una funzione applicabile ad
una stringa. La stringa a cui si applica è quella che ospita la funzione stessa.
Questa funzione analizza la stringa e cerca il carattere o la sequenza di caratteri (parola)
indicata come parametro, a partire dalla posizione nella stringa indicata da un secondo
parametro.
In definitiva:
modulo_dati.email.value.indexOf ('@', 0)
prende la stringa rappresentata dal valore immesso nel campo email e, a partire dalla
posizione 0 (dall’inizio quindi), cerca il carattere ‘@’. Se lo trova restituisce la posizione in cui è
stato trovato, altrimenti restituisce il valore -1.
Copyright 2002, EspertoWeb - www.espertoweb.it
20
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Se ad esempio il campo email contenesse il valore:
[email protected]
modulo_dati.email.value.indexOf ('@', 0) restituirebbe il valore 4, che è la posizione in cui
si trova il carattere ‘@’ partendo da 0.
Se sulla stessa stringa applicassi: modulo_dati.email.value.indexOf ('@', 6) il valore
restituito sarebbe –1, perché a partire dal carattere in posizione 6 della stringa non c’è alcun
‘@’.
Se invece il valore fosse:
ciccio_polenta
modulo_dati.email.value.indexOf ('@', 0) restituirebbe subito il valore –1, perché non
trova il carattere ‘@’ partendo dal carattere in posizione 0.
In questo modo si può verificare la presenza di caratteri o parole all’interno di una stringa.
Per verificare invece che in un campo sia stato immesso un valore numerico e non magari una
stringa, analizziamo l’if successivo che controlla il valore immesso nel campo “età”:
if (isNaN(modulo_dati.eta.value) || modulo_dati.eta.value=="" ) {
msg = msg + "Devi inserire un'età\n";
errore=true;
};
(nota che il campo si chiama “eta”, non si possono usare vocali accentate per nomi di variabili
o funzioni Javascript).
Come vedete nella condizione dell’if appaiono due espressioni unite dall’operatore logico or
(||). La prima espressione: isNaN(modulo_dati.eta.value) usa una funzione predefinita di
Javascript che consente di valutare se un determinato valore non sia un numero.
isNaN infatti è una forma contratta per Is Not a Number (non è un numero) e restituisce
valore true se il parametro fornito non è un numero, false altrimenti.
Quindi isNaN(modulo_dati.eta.value) restituisce true se il valore contenuto nel campo eta
non è un numero, false altrimenti.
Nel caso in cui il campo è da ritenersi obbligatorio, devo considerare non valido il campo non
solo nel caso in cui non ci sia un valore non numerico, ma anche quando non ci sia nulla. Per
questo la condizione completa da verificare è:
(isNaN(modulo_dati.eta.value) || modulo_dati.eta.value=="" )
la quale è true quando il valore del campo eta non è un numero o (||) quando il valore del
campo eta è nullo.
In questo caso imposto opportunamente la variabile errore e la variabile msg.
Copyright 2002, EspertoWeb - www.espertoweb.it
21
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
Il controllo che segue mostra un esempio di riferimento a campi di tipo “radio”.
In questo caso voglio verificare che l’utente abbia cliccato su un pallino e non li abbia lasciati
entrambi bianchi. Per fare ciò devo controllare che almeno una proprietà checked degli
elementi dell’array corrispondente al campo sia true:
if (!modulo_dati.sesso[0].checked && !modulo_dati.sesso[1].checked) {
msg = msg + "Devi indicare il sesso\n";
errore=true;
};
osservate la condizione che unisce in and (&&) le espressioni
!modulo_dati.sesso[0].checked e !modulo_dati.sesso[1].checked
ricordo che l’operatore ! sta per “negazione” logica.
La condizione quindi discorsivamente è questa:
non è vero che modulo_dati.sesso[0].checked sia vero e (&&) non è vero che
modulo_dati.sesso[1].checked sia vero.
Insomma questa condizione si verifica se non c’è neanche un checked di un pulsante radio a
true.
L’if che segue controlla se almeno un checkbox sia stato spuntato. Anche per un campo di tipo
checkbox è la proprietà checked ad indicare se il campo è spuntato o meno.
Il codice dovrebbe quindi essere ora abbastanza chiaro:
if (!modulo_dati.sport.checked && !modulo_dati.libri.checked &&
!modulo_dati.cinema.checked && !modulo_dati.musica.checked) {
msg = msg + "Devi indicare almeno un interesse\n";
errore=true;
};
In pratica la condizione si verifica se non c’è neanche un checkbox con la proprietà checked a
true..
L’ultimo if di controllo su quanto immesso dall’utente nel campo note è solo un pretesto
dimostrativo per introdurre un’altra utile funzione (metodo) degli oggetti stringa.
Per una mia fisima infatti non voglio far inviare commenti che contengono parole in cui ci sia la
parola “schifo” come schifo, schifoso, schifosissimo, etc.. o parole in cui ci sia “brutt” come
brutto, brutta, bruttissimo, etc.. :)
Ecco il codice:
var commenti=modulo_dati.note.value.toLowerCase();
if ((commenti.indexOf('schifo',0) != -1) || (commenti.indexOf(‘brutt’,0) != -1)) {
msg = msg + "dai.. non può farti così schifo questo modulo... :)\n";
errore=true;
};
ho introdotto una variabile che ho chiamato commenti a cui assegno il valore del campo note
trasformato però tutto in caratteri minuscoli. E’ proprio questo ciò che fa la funzione
toLowerCase() applicata alla stringa.
La variabile commenti quindi dopo questa istruzione contiene quanto immesso dall’utente nel
campo ma tutto in minuscolo. In questo modo potrò controllare anche la presenza di parole
Copyright 2002, EspertoWeb - www.espertoweb.it
22
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
quali “SCHIFO” o “SCHifo” o “ScHiFo” perché comunque grazie a toLowerCase() verrà
trasformato in “schifo”.
In modo analogo esiste la funzione toUpperCase() che trasforma tutto in … indovinate un po’.
Per cercare la presenza delle parole da me indesiderate non mi resta quindi che applicare
l’ormai nota funzione indexOf alla variabile commenti.
La condizione infatti verifica con un OR (||) se la variabile commenti contiene la stringa
‘schifo’ o contiene la stringa ‘brutt’. Se non la contiene, indexOf restituisce valore –1, se il
valore restituito da indexOf è diverso da –1 (!=-1) vuol dire che la contiene e allora no,
errore! :)
Fine del blocco di validazione dei campi.
Segue il codice che definisce le due funzioni mostra e nascondi che agiscono sul livello
passato come parametro e che ben conosciamo dalle precedenti dispense.
Ecco in definitiva il codice completo della pagina, compreso del controllo del livello gestito da
onBlur e onFocus sul campo email:
(http://www.espertoweb.net/dhtml/esempi/registrazione.htm)
<html>
<head>
<title>FLEO: modulo registrazione</title>
<script language="JavaScript">
var tutto_ok = false;
function controlla_dati() {
var errore=false;
var msg='';
if (modulo_dati.nome.value=="") {
msg = msg + 'Devi inserire il nome\n';
errore=true;
}
if (modulo_dati.cognome.value=="") {
msg = msg + 'Devi inserire il cognome\n';
errore=true;
}
if (modulo_dati.email.value=="") {
msg = msg + 'Devi inserire un email\n';
errore=true;
} else {
if (modulo_dati.email.value.indexOf ('@', 0) == -1) {
msg = msg + "hmmm... controlla meglio l'email, non mi sembra
valido...\n";
errore=true;
}
}
if (isNaN(modulo_dati.eta.value) || modulo_dati.eta.value=="" ) {
msg = msg + "Devi inserire un'età\n";
errore=true;
};
Copyright 2002, EspertoWeb - www.espertoweb.it
23
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
if (!modulo_dati.sesso[0].checked && !modulo_dati.sesso[1].checked) {
msg = msg + "Devi indicare il sesso\n";
errore=true;
};
if (!modulo_dati.sport.checked && !modulo_dati.libri.checked &&
!modulo_dati.cinema.checked && !modulo_dati.musica.checked) {
msg = msg + "Devi indicare almeno un interesse\n";
errore=true;
};
var commenti=modulo_dati.note.value.toLowerCase();
if ((commenti.indexOf('schifo',0) != -1) || (commenti.indexOf('brutt',0) != -1)) {
msg = msg + "dai.. non può farti così schifo questo modulo... :)\n";
errore=true;
};
}
if (errore) {
alert(msg);
tutto_ok=false;
} else {
tutto_ok=true;
};
function mostra(livello) {
var oggetto_livello=document.all[livello];
oggetto_livello.style.visibility="visible";
}
function nascondi(livello) {
var oggetto_livello=document.all[livello];
oggetto_livello.style.visibility="hidden";
}
</script>
</head>
Copyright 2002, EspertoWeb - www.espertoweb.it
24
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
<body>
<b>Registrati al nostro Club:</b>
<br><br>
<form ACTION="mailto:[email protected]" METHOD="POST" ENCTYPE="text/plain"
name="modulo_dati" onsubmit="controlla_dati();return tutto_ok">
<input type="hidden" name="nome_modulo" value="registrazione">
Nome: <input type="text" name="nome" size="40"><br>
Cognome: <input type="text" name="cognome" size="40"><br>
E-Mail: <input type="text" name="email" size="40" onFocus="mostra('guida_email');"
onBlur="nascondi('guida_email');"><br>
Età: <input type="text" name="eta" size="40"><br>
Sesso: <input type="radio" name="sesso" value="M">Maschio <input type="radio"
name="sesso" value="F">Femmina<br>
Interessi: <br>
<input type="checkbox" name="sport">Sport <input type="checkbox" name="libri">Libri
<input type="checkbox" name="cinema">Cinema <input type="checkbox"
name="musica">Musica<br>
Zona di provenienza: <select name="zona">
<option value="Nord">Nord
<option value="Centro">Centro
<option value="Sud">Sud
<option value="Isole">Isole
</select><br>
Note e commenti: <br>
<textarea cols="40" rows="10" name="note">scrivi qui un tuo commento</textarea>
<input type="submit" name="invia" value="Invia">
</form>
<DIV ID="guida_email" STYLE="position=absolute;top=100;left=300;visibility=hidden">
<table border="0" bgcolor="#99ffff">
<tr><td>
mi raccomando scrivi un email valido!
</td>
</tr>
</table>
</DIV>
</body>
</html>
Notate la presenza del campo “hidden”, nascosto, il cui valore ritroverete nell’email che vi
arriverà quando proverete la pagina.
Ovviamente per provare la pagina nell’ACTION indicate il vostro email, in modo da rendervi
conto di come i dati inseriti nel modulo arrivino all’email specificato.
Quando cliccherete sul pulsante di submit dovete ovviamente trovarvi connessi ad internet e
vi si aprirà un box col quale vi si chiede di confermare l’invio dei dati via email.
Questo box appare automaticamente quando si esegue un ACTION di tipo mailto:, confermate
il tutto e vedrete il vostro client di posta elettronica spedire un messaggio (dopo aver richiesto
ulteriore conferma).
Tale messaggio verrà recapitato all’indirizzo indicato nell’ACTION.
Copyright 2002, EspertoWeb - www.espertoweb.it
25
Definizione e validazione di form – Dispensa corso DHTML EspertoWeb – Francesco Leonetti
L’utente finale potrebbe rimanere disorientato dalle richieste di conferma di questo email,
sarebbe opportuno prepararlo alla cosa avvisandolo con delle piccole istruzioni scritte nel
modulo, magari in vicinanza del pulsante di submit.
Come ho detto all’inizio, un modo più evoluto di elaborare i dati raccolti da un modulo consiste
nel richiamare nell’ACTION una procedura sul server, come una pagina in PHP per esempio.
Chi fosse interessato a queste linea evolutiva non ha che da rimanere nei nostri corsi :)
Copyright 2002, EspertoWeb - www.espertoweb.it
26