Realizziamo ora una semplice interfaccia per l'invio di una e-mail tramite un form (o "modulo").
1. Crea un nuovo file contattami.cfm e salvalo nella solita cartella "discoteca".
2. Scrivi i due <cfinclude> per inserire l'intestazione e il piede della pagina. tra questi due tag, possiamo inserire un titolo e un testo come segue:
<!--- contattami.cfm: visualizza un form per l'invio di una mail --->
<cfinclude template="header.cfm">
<div class="CorpoPagina">
<p class="titolo">Invia una mail al webmaster</p>
<p>Compila il modulo e clicca su "Invia" per inviare la mail.</p>
</div>
<cfinclude template="footer.cfm">
Il CFML possiede dei tag per creare i form. Questi tag permettono una gestione un po' più avanzata di quello che possiamo fare con i semplici tag HTML, come ad esempio rendere obbligatoria la compilazione dei campi.
3. Ad esempio, aggiungi un <cfform> alla pagina contattami.cfm:
<!--- contattami.cfm: visualizza un form per l'invio di una mail --->
<cfinclude template="header.cfm">
<div class="CorpoPagina">
<p class="titolo">Invia una mail al webmaster</p>
<p>Compila il modulo e clicca su "Invia" per inviare la mail.</p>
<p>
<cfform action="invia_mail.cfm">
La tua mail:<br>
<cfinput name="Mail" type="text" size="50" maxlength="250" required="yes" message="Inserisci la tua e-mail">
<br><br>
Oggetto:<br>
<cfinput name="Oggetto" type="text" size="50" maxlength="250" required="yes" message="Compila il campo oggetto.">
<br><br>
<strong>Messaggio: </strong><br>
<textarea cols="50" rows="5" name="Messaggio"></textarea>
<br><br>
<input type="submit" value="Invia">
</cfform>
</p>
</div>
<cfinclude template="footer.cfm">
Aprendo la pagina "http://localhost:8500/discoteca/contattami.cfm" viene mostrato un semplice form HTML. Noi, anziché usare i soliti tag HTML <form> e <input>, abbiamo inserito <cfform> e <cfinput>. La sintassi di <cfform> è molto simile a quella di <form>, con la differenza che il "method" predefinito è "post". Inserire un <cfform> ci permette di usare, al suo interno, il tag <cfinput>, che crea un campo input con la possibilità di aggiungere un controllo del campo prima dell'invio del form. Nel nostro caso, abbiamo inserito tra gli attributi di <cfinput> un required="yes" che indica come obbligatoria la compilazione di tale, e un attributo "message" che mostrerà un'avviso nel caso in cui il campo non è stato compilato. Gli altri attributi di <cfinput> sono identici a quelli richiesti dal tag <input> nell'HTML standard.
Se fai delle prove, vedrai che il form non sarà inviato finché non compili il campo Oggetto e il campo Mail.
Come puoi notare, il form punta al file invia_mail.cfm che conterrà la parte destinata ad inviare la mail. Quando il visitatore clicca su "Invia":
- controlleremo se il messaggio è vuoto;
- se questo accade, dovrà essere visualizzato nuovamente il form;
- altrimenti sarà inviata la mail;
- una volta spedito il messaggio, il visitatore sarà riportato nella homepage del sito.
4. Salva un nuovo file vuoto con nome "invia_mail.cfm" nella cartella "discoteca". Questo file gestirà solamente la logica dell'invio, quindi non avremo bisogno di mostrare intestazione e piede della pagina.
5. Inserisci nel file invia_mail.cfm un controllo che verifichi che il messaggio è stato inviato dal form:
<cfif form.Messaggio EQ "">
<cflocation url="contattami.cfm">
</cfif>
Con il tag <cfif> verifichiamo se è vera o falsa un'espressione. Se l'espressione è vera, allora ColdFusion esegue il codice contenuto all'interno del tag <cfif>. In questo caso controlleremo che l'espressione form.messaggio EQ "" sia vera.
In ColdFusion, le variabili provenienti da un modulo hanno scope "form". Il loro nome è quello di ciascun campo nel modulo. La <textarea> che avevamo inserito ha nome messaggio (impostato tramite l'attributo name.
In CFML gli operatori di confronto sono:
EQ o IS (senza distinzione) per verificare l'uguaglianza
NEQ o IS NOT per verificare la disuguaglianza
LTE (Less Then Equal) per verificare se il primo valore è minore o uguale del secondo
LT (Less Then) per verificare se il primo valore è minore del secondo
GTE (Greater Then Equal) per verificare se il primo valore è maggiore o uguale del secondo
GT (Greater Then) per verificare se il primo valore è maggiore del secondo
ColdFusion non utilizza gli operatori diffusi in altri linguaggi di programmazione come <, <=, <> eccetera.
Con l'espressione form.Messaggio EQ "" eseguiamo quindi un confronto di uguaglianza tra la variabile form.Messaggio e la stringa vuota. Nota che anche qui, per utilizzare il valore della variabile, non l'abbiamo inserita tra due cancelletti. Non è necessario infatti utilizzare questa notazione all'interno del tag <cfif>.
In CFML, le stringhe sono distinte dagli apici o dai doppi apici. Ad esempio,
<cfset miaStringa = "Tanto va la gatta al lardo">
<cfif miaStringa EQ 'Tanto va la gatta al lardo'>
<cfoutput>#miaStringa# che ci lascia lo zampino</cfoutput>
</cfif>
crea una variabile "miaStringa" contentente una stringa. Il <cfif> successivo verifica l'uguaglianza della variabile con una stringa utilizzando gli apici singoli anziché gli apici doppi. E' importante capire che in questo caso gli apici sono obbligatori: non utilizzando i cancelletti, <cfif> avrebbe dato errore valutando un'espressione simile:
<cfif miaStringa EQ Tanto>
poiché "Tanto" sarebbe stato intepretato come una variabile.
Con il tag <cflocation> ColdFusion porta il browser nella pagina indicata nell'attributo "url".
6. Utilizza la funzione trim() per tagliare gli eventuali spazi all'inizio e alla fine della variabile form.messaggio ed evitare, quindi, che vengano inviate e-mail il cui corpo è rappresentato solo da spazi:
<cfif trim(form.Messaggio) EQ "">
<cflocation url="contattami.cfm">
</cfif>
7. Nel caso opposto, cioè in cui la variabile form.messaggio non è rappresentata da una stringa vuota, ColdFusion deve inviare una mail. Aggiungiamo quindi il tag <cfelse> all'interno di <cfif>. Ciò che sta a sua volta all'interno di <cfelse>...</cfif> sarà elaborato solamente se la condizione posta in <cfif> è falsa.
<cfif trim(form.Messaggio) EQ "">
<!--- Se il messaggio è vuoto, riporta l'utente nella pagina contattami.cfm --->
<cflocation url="contattami.cfm">
<cfelse>
<!--- altrimenti invia la mail --->
</cfif>
8. Il tag <cfmail> è quello adibito all'invio di e-mail. Negli attributi del messaggio, si specificano mittente, oggetto e destinatario della mail. Il corpo del tag <cfmail> invece rappresenta il corpo dell'e-mail che sarà inviata:
<cfif trim(form.Messaggio) EQ "">
<!--- Se il messaggio è vuoto, riporta l'utente nella pagina contattami.cfm --->
<cflocation url="contattami.cfm">
<cfelse>
<!--- altrimenti invia la mail --->
<cfmail from="#form.mail#" to="giampaolo@bellavite.com" subject="#form.oggetto#">
#form.messaggio#
</cfmail>
</cfif>
L'attributo "from", quindi, dovrà contenere il contenuto della variabile form.mail (il campo mail del form); l'attributo "to" il destinatario della mail (in questo caso, l'indirizzo e-mail del webmaster) e l'attributo "subject" il contenuto della variabile form.oggetto proveniente dal form. All'interno del tag <cfmail> si inserisce il contenuto della mail (body) - che nel nostro caso è rappresentato dalla variabile proveniente dalla textarea "messaggio" inviata dal form.
Una volta spedita l'e-mail, il visitatore può essere spostato nella homepage del sito.
Aggiungiamo quindi un <cflocation> dopo il tag di chiusura </cfmail> che punti a index.cfm:
<cfif trim(form.Messaggio) EQ "">
<!--- Se il messaggio è vuoto, riporta l'utente nella pagina contattami.cfm --->
<cflocation url="contattami.cfm">
<cfelse>
<!--- altrimenti invia la mail --->
<cfmail from="#form.mail#" to="giampaolo@bellavite.com" subject="#form.oggetto#">
#form.messaggio#
</cfmail>
<!--- Una volta spedito il messaggio, sposta il browser alla pagina index.cfm --->
<cflocation url="index.cfm">
</cfif>
Il nostro file invia_mail.cfm è completato!
9. Infine, aggiungiamo un link alla homepage e al file contattami.cfm nel footer.cfm per creare una piccola barra di navigazione:
<!--- footer.cfm: contiene le dichiarazioni finali della pagina HTML e il piede delle pagine --->
<hr>
<div class="corpoPagina">
<cfset Oggi = Now()>
<span class="piede">
<cfoutput>
<a href="index.cfm">homepage</a> | <a href="contattami.cfm">Contattami</a> | Oggi è <strong>#LSDateFormat(Oggi, 'dddd, d mmmm yyyy')#</strong>
</cfoutput>
</span>
</div>
</body>
</html>
Prova ora ad inviarti delle e-mail (assicurati di aver impostato il tuo indirizzo e-mail nel campo "to" di <cfmail>) collegandoti alla pagina: "http://localhost:8500/discoteca/contattami.cfm".
Puoi scaricare i file che abbiamo utilizzato fino ad ora da qui.