WRInaute passionné
voilà bien longtemps que je n'avais pas publié de script PHP...
L'objet de ce script est de protéger vos formulaires de contact par un code secret généré graphiquement à recopier dans un champ du formulaire afin d'éviter à des robots de vous bombarder de mails de spam.
La code secret, pour rester secret :wink: , est passé par variable de session.
Au début de votre page contenant le formulaire, inserez le code suivant:
Votre script de traitement de formulaire doit resembler à ceci
Enfin, le script de génération de code scret
Je vous donne aussi l'image utilisée pour tramer le code secret dans cet exemple
Voilà, c'est fini!
edit: pour faire plaisir à correiaj, ce script utilise la librairie GD2 disponible ici: http://www.boutell.com/gd/ :wink:
L'objet de ce script est de protéger vos formulaires de contact par un code secret généré graphiquement à recopier dans un champ du formulaire afin d'éviter à des robots de vous bombarder de mails de spam.
La code secret, pour rester secret :wink: , est passé par variable de session.
Au début de votre page contenant le formulaire, inserez le code suivant:
Code:
<?php
session_start();//ouverture d'une session
$secret=""; //initialisation du code secret
for($i=0;$i<5;$i++) { //génération du code secret à 5 caractères
$secret.=chr(mt_rand(65, 90));
}
$_SESSION['secret'] = $secret;//stockage du code dans une variable de session
?>
Votre script de traitement de formulaire doit resembler à ceci
Code:
<?php
session_start();
if ($_POST['Secret']==$_SESSION['secret']) { // code secret valide
votre code de traitement du formulaire
} else { // code scret invalide
votre code de traitement de code secret invalide
}
unset($_SESSION['secret']); // on detruit le code secret
votre code de traitement de retour
?>
Enfin, le script de génération de code scret
Code:
<?php
session_start(); //demarrage de la session
$text=$_SESSION['secret']; //on récupére le code à générer
header("Content-type: image/png"); //définition du type d'image générée (png)
$im = imagecreatefromjpeg("secret.jpg");// Création de l'image à partir d'un fichier contenant le fond de l'image à générer
$id = imagecreatefromjpeg("secret.jpg");// Création d'une deuxième image identique
$grey = imagecolorallocate($im, 128, 128, 128); // définition de la couleur "gris"
$black = imagecolorallocate($im, 0, 0, 0); // définition de la couleur "noir"
$font = 'COURBD.TTF';// à remplacez le chemin par votre propre chemin de police TTF
for($i=0;$i<5;$i++) { //boucle de génération des 5 caractères du code secret
$angle=mt_rand(10,30); //définition d'un angle aléatoire entre 10 et 30 degrés
if(mt_rand(0,1)==1) $angle=-$angle; //définition aléatoire du signe à appliquer à l'angle
imagettftext($im, 14, $angle, 11+(20*$i), 21, $grey, $font, substr($text,$i,1));// génération de l'ombre d'un caractère du code secret en gris
imagettftext($im, 14, $angle, 10+(20*$i), 20, $black, $font, substr($text,$i,1));// génération du caractère du code secret en noir
}
$id=imagerotate ( $id, 180,0 ); // on applique une rotation de 180° à notre deuxième image créée à partier de l'image de fond
imagecopymerge ( $im, $id, 0, 0, 0, 0, 120, 30, 50 ); //on fusione cette image à notre code secret avec un facteur de tranparence de 50%
imagepng($im); //notre code secret est terminé
imagedestroy($im); //on libére nos ressources images
imagedestroy($id);
?>
Je vous donne aussi l'image utilisée pour tramer le code secret dans cet exemple
Voilà, c'est fini!
edit: pour faire plaisir à correiaj, ce script utilise la librairie GD2 disponible ici: http://www.boutell.com/gd/ :wink: