info@nebulosaweb.com

Realizzare un contact form in PHP

form
Uno strumento indispensabile in molti siti, che siano essi dinamici o statici è un form che permetta ai visitatori di contattare gli amministratori. Realizzarne uno non è molto complicato anche per chi ha poche conoscenze del PHP, in questo articolo vi spiegherò come fare.

Partiamo col creare il classico contact form in HTML:

<form method="post" action="">
	<label for="name">Nome</label>
	<input type="text" name="name" id="name"></input>
	<label for="mail">Email</label>
	<input type="text" name="mail" id="mail"></input>
	<label for="subject">Oggetto</label>
	<input type="text" name="subject" id="subject"></input>
	<label for="message">Messaggio</label>
	<textarea rows="5" cols="40" name="message" id="message"></textarea>
	<input type="submit" value="Invia"></input>
</form>

Adesso passiamo a dargli una formattazione minima mediante CSS e sempre tramite tale creiamo due selettori per i messaggi di errore o di successo.

label, input{
	display:block;
}

.error{
	color:#ff0000;
	font-weight:bold;
}

.sent{
	color:#00D60E;
	font-weight:bold;
}

A questo punto, costruita e verniciata la carrozzeria si passa alla realizzazione del motore PHP del form che è suddiviso in due parti, la prima effettua un controllo sui dati immessi e la seconda si occupa dell’invio della mail.
Entrambe le parti dello script che segue dovranno essere inserite in un file .php che in questo esempio chiamerò sendMessage.php all’interno del tag <?php ?>.

//Controllo dati
$error= "";

if(isset($_POST['name']) and $_POST['name'] != ""){//<- controllo nome
	$nome= strip_tags($_POST['name']);
}
elseif(isset($_POST['name'])){
	$error .= "Nome mancante.<br />";
}

if(isset($_POST['mail']) and preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $_POST['mail'])){//<- controlla se la mail è presente e se è in un formato valido
	$mail = $_POST['mail'];
}
elseif(isset($_POST['mail'])){
	$error .= "Email mancante o non valida.<br />";
}

if(isset($_POST['subject']) and $_POST['subject'] != ""){//<- controllo oggetto
	$oggetto = "[Messaggio dal tuo sito] ".strip_tags($_POST['subject']);
}
elseif(isset($_POST['subject'])){
	$error .= "Inserire un oggetto al messaggio.<br />";
}

if(isset($_POST['message']) and $_POST['message'] != ""){//<- controllo messaggio
	$messaggio = strip_tags($_POST['message']);
}
elseif(isset($_POST['message'])){
	$error .= "Inserire un messaggio.<br/>";
}

Di seguito lo script per l’invio dei dati tramite mail.

//Invio mail
if(isset($nome,$mail,$oggetto,$messaggio)){
	$destinatario = "your@email.com";//<- ricorda di cambiarla!
	$intestazione = "From: ".$mail."\r\n";		
	$messaggio .= "\n\nMittente: ".$nome."\nEmail: ".$mail."";		
	
	mail($destinatario, $oggetto, $messaggio, $intestazione);
	
	echo "<p class='success'>Messaggio inviato con successo!</p>";
}
else{
	echo "<p class='error'>".$error."</p>";
}

Ora abbiamo tutto il necessario per far funzionare il nostro form, non resta altro che mettere assieme tutti i pezzi, fate bene attenzione a inserire il form in un file .php e non .html.
Il risultato finale dovrà essere posizionato pressapoco come il seguente.

<head>
	<style type="text/css">
		/*CSS*/
	</style>
	<title>Esempio di form in PHP</title>
</head>
<body>
	<?php include('sendMessage.php'); ?> <!--ricorda di cambiare l'url in caso che lo script sia allocato in una cartella diversa dal form-->
	<form method="post" action="">
		<!--Campi del form-->
	</form>
</body>

Concludo questa guida con un link al risultato finale di esempio, testate pure il suo funzionamento, è innocuo e non mi riempirete la casella mail di spam.

Autore: Fabio Di Stasio

Web Designer Freelance specializzato in sviluppo web, realizzazione di template responsive, creazione di temi e plugin WordPress e purista degli standard W3C.