Realizzare un form PHP e HTML

Quando ci troviamo a realizzare un sito web vetrina sicuramente avremo la necessità di creare una pagina dei contatti, permettendo ai visitatori del sito di poter contattare facilmente l’azienda, senza che l’utente debba per forza avere a disposizione un software di posta per poter spedire un email.

Nella realizzazione di un form html ci sono due fasi da seguire, la prima è quella di realizzare il modulo in codice HTML e la seconda è quella di realizzare la pagina che processa i dati inseriti dall’utente con un codice PHP appositamente scritto per costruire il messaggio e spedirlo via email all’indirizzo feedback dell’azienda.

Le principali problematiche da considerare sono il controllo di inserimento dei dati (check del formato) e l’eventuale inserimento di un codice CAPTCHA per evitare i messaggi di spam inviati da sistemi automatici detti robot. In questa guida analizzeremo anche questi due aspetti.

Cominciamo con il nostro form html composto da elementi standard richiesti per la maggior parte dei casi in cui stiamo realizzando un semplice sito vetrina.

[code]

<form id="form1" name="form1" method="post" action="esito.php">
<p>
<label for="nome">Nome</label>
<input type="text" name="nome" id="nome" />
</p>
<p>
<label for="email">Email</label>
<input type="text" name="email" id="email" />
</p>
<p>
<label for="messaggio">Messaggio</label>
<textarea name="messaggio" id="messaggio" cols="45" rows="5"></textarea>
</p>
<p>
<input name="privacy" type="checkbox" id="privacy" value="1" />
<label for="privacy">….Testo della Privacy….</label></p>
<p>
<label for="captcha">Digita il Codice di verifica</label>
<input type="text" name="captcha" id="captcha" />
<img src="captcha.php" alt="captcha image"></p>
<p>
<input type="submit" name="submit" id="submit" value="Invia Messaggio" />
</p>
</form>

[/code]

Adesso passiamo alla creazione della pagina con il codice PHP che provvede al controllo dei dati inseriti e all’ invio del messaggio.

Il linguaggio PHP prevede l’accesso ad una variabile ambiente adibita allo scopo di recuperare i valori inseriti in un modulo inviato al server con la modalità POST (method=”post”). La variabile ambiente che ci interessa in questo caso è $_POST, sostanzialmente è un array associativo dove a ogni indice corrisponde il valore contenuto in esso, quindi il valore scritto nel campo di testo “nome” potrà essere recuperato con la variabile $_POST[‘nome’] e via via tutti gli altri.

Creiamo un file e chiamiamolo “esito.php” e incolliamo il codice

[code]
<?php

function isValidEmail($email){
return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email);
}

if (isset($_POST[‘submit’])) {
$nome=$_POST[‘nome’];
$email=$_POST[‘email’];
$messaggio=$_POST[‘messaggio’];
$privacy=$_POST[‘privacy’];
if (!empty($nome)) {
if (!empty($email)) {
if (isValidEmail($email)) {
if (!empty($messaggio)) {
if ($privacy==1) {
if($_SESSION["captcha"]==$_POST["captcha"]) {
$testo_del_messaggio="Nome: $nome\n";
$testo_del_messaggio.="Email: $email\n";
$testo_del_messaggio.="Messaggio: $messaggio\n";
$testo_del_messaggio.="Privacy: $privacy\n";
$esito=mail("[email protected]","Messaggio di $nome ($email)", $testo_del_messaggio);
if ($esito) {
echo "Esito: Messaggio inviato, ripsonderemo appena possibile!";
} else {
echo "Errore: Non &egrave; stato possibile inviare il messaggio!";
}
} else {
echo "Errore: Il Codice di verifica non &egrave; corretto!";
}
} else {
echo "Errore: Bisogna dare il consenso sulla Privacy!";
}
} else {
echo "Errore: Manca il Messaggio!";
}
} else {
echo "Errore: Formato Email non corretto!";
}
} else {
echo "Errore: Manca un indirizzo Email!";
}
} else {
echo "Errore: Manca il Nome!";
}
} else {
echo "Errore: Modulo di invio non valido!";
}

?>[/code]

Analizziamo i vari punti del codice qui sopra:

1) Abbiamo prima di tutto raccolto per comodità le variabili ambiente in alcune variabili locali che cesseranno di esistere al termine dello script;

2) Abbiamo controllato i valori di ogni variabile obbligatoria con una serie di if-then-else così da essere sicuri che l’utente non possa commettere errori;

3) la funzione isValidEmail() ci permette di controllare la formattazione dell’indirizzo email, ossia: [email protected];

4) Controlliamo se l’utente ha correttamente spuntato l’approvazione del trattamento sulla privacy;

5) Verifichiamo che il codice di verifica sia quello visualizzato nell’immagine generata dal file captcha.php

6) Abbiamo costruito il messaggio da spedire, in questo caso abbiamo optato per un messaggio in formato ASCII e con una serie di \n ci assicuriamo che non vi siano testi consecutivi così da rendere il messaggio recapitato sufficientemente leggibile;

7) Infine inviamo il messaggio con la funzione mail() di PHP preposta all’invio di messaggi di testo tramite il servizio sendmail del server dove il sito risiede.

La funzione “mail()” come si può dedurre dal codice prevede come primo parametro l’indirizzo email di destinazione, quindi l’Oggetto del messaggio come secondo parametro e infine il corpo del messaggio che passiamo tramite la variabile $testo_del_messaggio.

A questo punto possiamo procedere alla creazione dello script CAPTCHA per impedire i robot di inviare messaggi di spam

Creiamo un file chiamato “captcha.php” e incolliamo questo codice:

[code]<?php
session_start();
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

function _generateRandom($length=6)
{
$_rand_src = array(
array(48,57) //digits
, array(97,122) //lowercase chars
// , array(65,90) //uppercase chars
);
srand ((double) microtime() * 1000000);
$random_string = "";
for($i=0;$i<$length;$i++){
$i1=rand(0,sizeof($_rand_src)-1);
$random_string .= chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1]));
}
return $random_string;
}

$im = @imagecreatefromjpeg("captcha.jpg");
$rand = _generateRandom(3);
$_SESSION[‘captcha’] = $rand;
ImageString($im, 5, 2, 2, $rand[0]." ".$rand[1]." ".$rand[2]." ", ImageColorAllocate ($im, 0, 0, 0));
$rand = _generateRandom(3);
ImageString($im, 5, 2, 2, " ".$rand[0]." ".$rand[1]." ".$rand[2], ImageColorAllocate ($im, 255, 0, 0));
Header (‘Content-type: image/jpeg’);
imagejpeg($im,NULL,100);
ImageDestroy($im);
?>[/code]

Questo file provvederà alla creazione di una immagine jpg contenente un codice numerico che l’utente dovrà trascrivere in una casella di testo prima di inviare il modulo.

Adesso riprendiamo il file “esito.php” con il codice per l’invio del messaggio e aggiungiamo all’inizio del file questa riga:

[code]<?php session_start() ?>[/code]

Assicuriamoci che sia la prima riga del file, deve essere inserita prima di “<!DOCTYPE…”.

Il nostro modulo dei contatti è finalmente pronto, possiamo pubblicarlo e provare tutte le possibili situazioni reali e controllare che tutto funzioni correttamente.

Hosting con WordPress e Joomla a partire da 24 €
3.3/5 - (6 votes)