Inviare una mail dal web (Parte 3) - Controllo sui campi
Un breve articolo su come spedire ad un indirizzo e-mail dei dati raccolti da un form.
Riferimenti:
Inviare una mail dal web (Parte 1)
Inviare una mail dal web (Parte 2)
Controlliamo i campi con PHP
Nelle guide precedenti abbiamo visto come spedire una mail tramite un form HTML grazie alla funzione
mail(), ma senza affrontare la (doverosa) problematica del controllo sui campi.
Come nella maggior parte dei form alcuni campi andrebbero resi obbligatori, nel nostro caso, ad esempio, il campo "
Commento" se spedito vuoto renderebbe decisamente inutile tutto il form. Quindi andremo ora a vedere come controllare il tutto
tramite semplici cicli in modo da segnalare un errore in caso uno o più di essi fossero vuoto.
// controllo del capo "nome"
if($nome == "") {
echo "<h3>$invioNoTitolo</h3>";
echo "<p>$campiNoCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
Se i campi da controllare sono più d'uno (nel nostro caso ad es. vogliamo controllare anche i campi "
Commento" e "
email") possiamo riassumere la condizione dell' if grazie all' operatore booleano
|| (OR), quindi scrivere:
// controllo campi "nome", "commento" ed "email"
if(($nome == "") || ($commento == "") || ($email == "")) {
echo "<h3>$invioNoTitolo</h3>";
echo "<p>$campiNoCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
Naturalmente bisogna aggiungere la nuova variabile
$campiNoCorpo:
$campiNoCorpo = "Campi obbligatori vuoti o non validi.";
Miglioriamo il controllo sul campo email
Come ben sappiamo un' email è sempre della forma
io@host.xx, ovvero:
* caratteri alfanumerici dalla "a" alla "z", da "0" a "9" più altri caratteri _ (underscore), ecc.
* carattere "@" (chiocciolina)
* altri caratteri descritti pocanzi
* il . (punto)
* un minimo di 2 e massimo di 4 caratteri dalla "a" alla "z"
così grazie alla funzione
eregi() possiamo tradurre quella lista di proprità in una cosa del genere:
// ulteriore controllo campo email
else if(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$email)) {
echo "<h3>$invioNoTitolo</h3>";
echo "<p>$campiNoCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
Il risultato finale sarà quindi il seguente:
// controllo campi "nome", "commento" ed "email"
if(($nome == "") || ($commento == "") || ($email == "")){
echo "<h3>$invioNoTitolo</h3>";
echo "<p>$campiNoCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
// ulteriore controllo campo email
else if(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$email)) {
echo "<h3>$invioNoTitolo</h3>";
echo "<p>$campiNoCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
Il codice PHP finale
Mettendo tutto in ordine nella pagina
inviaLaMail.php andremo a scrivere:
<?php
/*********** variabili da settare ***********/
$to = "tua_mail@tuo_host.it"; //indirizzo email a cui verrà inviata l'email
$soggetto = "Contatto spedito dal mio sito"; //è il soggetto che comparirà nell'email
$invioOkTitolo = "Contatto spedito correttamente :-)";
$invioOkCorpo = "Grazie per avermi contattato";
$invioNoTitolo = "Errore";
$invioNoCorpo = "Si è verificato un errore... riprovare l'invio :-(";
$campiNoCorpo = "Campi obbligatori vuoti o non validi.";
$back = "<p><a href=\"javascript:history.back()\" title=\"Torna indietro\"><strong>Indietro</strong></a></p>";
/*********** fine variabili da settare ***********/
// costruzione corpo messaggio
$body = "Nome: " . trim(stripslashes($_POST["nome"])) . "\n";
$body .= "e-mail: " . trim($_POST["email"]) . "\n\n";
$body .= "Commento: \n" . trim(stripslashes($_POST["commento"])) . "\n";
// controllo campi "nome", "commento" ed "email"
if(($nome == "") || ($commento == "") || ($email == "")) {
echo "<h3>$invioNoTitolo</h3>";
echo "<p>$campiNoCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
// ulteriore controllo campo email
else if (!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $email)) {
echo "<h3>$invioNoTitolo</h3>";
echo "<p>$campiNoCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
// controllo invio
else if (@mail ($to , $soggetto , $body , "From: $email")) {
echo "<h3>$invioOkTitolo</h3>";
echo "<p>$invioOkCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
else {
echo "<h3>$invioNoTitolo</h3>";
echo "<p>$invioNoCorpo</p>";
echo "<p> </p>"; // crea paragrafo vuoto per creare uno spazio
echo $back;
}
?>
Per i pigri
Per i più pigri ecco le due pagine belle pronte:
invio_mail_02.zip
Salut
drudo
Si consiglia la visione dell'immagine
con un browser degno di tal nome...