[Php] Formulaire de contact avec protection

Publié le 28 novembre 2008 par Johnsgraphisme

// Alors, voici un petit tutoriel ressorti d’un fond de tirroir, qui explique comment réaliser et cela en php, un formulaire d’envois de mail avec une image de protection. Pour dire plus simplement, c’est un formulaire de contact. Nous allons faire cela en 3 étapes, il faudra créer dans un premier temps l’image dynamique qui permettra de mettre en place un sécurité pour les spambots. Dans un second temps le formulaire de contact en lui même, et enfin le traitement du formulaire. Se sont des étapes classiques pour la création d’un module comme celui-ci.

Création de l’image dynamique :

<?
// Démarage d'une session
session_start();
// Définition de la liste des caractères autoriés, on exclus le 0
$liste = "abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// On créer la valeur du code
$code = '';
// On crée la chaine de 5 caractères
while(strlen($code) != 5) {
$code .= $liste[rand(0,63)];
}
$_SESSION['code']=$code;
// On crée une image
$larg = 50;
$haut =20;
$img = imageCreate($larg, $haut);
$rouge = imageColorAllocate($img,255,0,0);
$noir = imageColorAllocate($img,0,0,0);
$code_police=5;
header('Expires: Mon, 08 Dec 2008 12:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
// On intégre le code dans l'image
imageString($img, $code_police,($larg-imageFontWidth($code_police)*strlen("".$code.""))/2,0, $code,$noir);
// On créé une image de mauvaise qualité, 23% de l'image normal
imagejpeg($img,'',23);
imageDestroy($img);
?>

Enregistrez votre fichier sous dynamique.php

Création du formulaire de contact :

<form action="contact.php" method="post" name="contact" id="contact">
<p>
<label for="mail">Votre adresse mail :</label><br />
<input type="text" id="mail" name="mail" size="20" maxlength="100"/><br />
<label for="objet">Objet du mail :</label><br />
<input name="objet" type="text" size="20" maxlength="100" /><br />
<label for="msg">Texte du mail :</label><br />
<textarea name="msg" cols="40" rows="4"></textarea><br />
<img src="dynamique.php" alt="securisation du formulaire" title="securisation du formulaire" /><br />
<label for="verif">Recopier le code ci dessus dans le champ qui suit :</label><br />
<input type="text" name="verif" size="10" maxlength="5" />
</p>
<p>
<input type="submit" value="Envoyer" />
</p>
</form>

Enregistrez votre fichier sous formulaire.php

Création du traitement :

<?
// Demarrage de session
session_start();
// Test de la variable
if(!isset($_SESSION['code']) OR strlen($_SESSION['code']) !=5) exit("Erreur !");

// Comparaison des valeurs
if($_SESSION['code'] != $_POST['verif']) exit("Erreur les valeurs sont différentes !");
// Recuperation du mail de l'envoyeur
$exp = $_POST['mail'];
// On formate les chaines
$objet = stripslashes($_POST['objet']);
$msg = stripslashes($_POST['msg']);
// Envoi du mail
$envoi=mail("contacta@site.net", $objet, $msg,"From: $exp\r\n"."Reply-To: $exp\r\n");
if($envoi) echo"Le mail a bien été envoyé !";
else echo"L'envoi a échoué, merci de renouveller l'opération !";
// On efface et détruit les varaibles de sessions
session_unset();
session_destroy();
?>

Enregistrez ce fichier sous contact.php

Voila, le tour est joué, il ne reste plus qua le tester.



Articles relatifs