Vous avez souvent vu des formulaires d'inscriptions qui demandait de taper les lettres données par une image déformée.
Cette méthode a pour but d'éviter que les formulaires ne soients publiés plusieurs fois ou de manière automatique en obligeant le visiteur à lire l'image.
Le script ci dessous va, dans le cadre d'une inscription, montrer comment concevoir et utiliser une image-code déformée grace à la bibliothèque GD de php.
exemple :
Les fonctions
<?
// fichier functions_inc.php
// Liste des fontes utilisées
// Doivent être placées dans le même répertoire que codeImage.php
// Vous pouvez ajouter autant de fontes que vous le désirez
// mais attention à la lisibilité
$gs_font =array();
$gs_font[] = "atomicclockradio.ttf";
$gs_font[] = "soopafre.ttf";
$gs_font[] = "VEGETABLE.TTF";
$gs_font[] = "NEWCRACK.TTF";
$gs_font[] = "Acidic.TTF";
$gs_font[] = "Kingthings_Printingkit.ttf";
$gs_font[] = "Times_and_Times_again.ttf";
$gs_font[] = "Vanthian_Ragnarok.ttf";
// nom de la variable de session
$gs_sImage = "ImageCode";
// Génération d'un code aléatoire de 6 caractères
function randomString()
{
$ls_return='';
$la_chars = array ( '1','2','3','4','5','6','7','8','9','0',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z' );
}
for ($li_i = 0; $li_i < 6; $li_i++)
{
$ls_random = rand(0, count($la_chars) -1);
$ls_return .= $la_chars[$ls_random];
}
return $ls_return;
}
// Vérification du code recu
function checkImageCode($as_code)
{
global $gs_sImage;
session_start();
if(!isset($_SESSION[$gs_sImage]))
$return = 0;
else
$return = ($as_code == $_SESSION[$gs_sImage]) ? 1 : 0;
// pour éviter le multi-post, il faut écraser la variable
$_SESSION[$gs_sImage] = randomString();
return $return;
}
// Génération d'une image-code
function createImageCode()
{
global $gs_sImage;
global $gs_font;
// Mise en session de la chaine représentée en image
$ls_code = randomString();
session_start();
$_SESSION[$gs_sImage] = $ls_code;
// Tirage aléatoire d'une des fontes proposées
$li_rand = intval(mt_rand(0,count($gs_font)-1));
$ls_font = $gs_font[$li_rand];
// création de image avec GD
$lo_im = @imageCreate(155, 50)
or die("impossible d'initialiser le bilbiothèque GD");
$ls_textColor = imageColorAllocate($lo_im, 0x00, 0x00, 0x00);
ImageTTFText($lo_im, 20, 5, 18, 38, $ls_textColor, $ls_font , $ls_code);
// Créée dans le passé
header("Expires: Thu, 28 Aug 1997 05:00:00 GMT");
// modifiée à chaque fois
$timestamp = gmdate("D, d M Y H:i:s");
header("Last-Modified: " . $timestamp . " GMT");
// HTTP/1.1 : éviter la mise en cache
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// HTTP/1.0 : éviter la mise en cache
header("Pragma: no-cache");
// ecrire l'image
header("Content-type: image/jpeg");
ImageJPEG($im);
}
?>
L'image
Ce fichier va générer une image. Il s'agit d'un script php, nous devons donc lui donner une extension .php mais il ne génère pas du html mais bien un jpeg.
<?
// fichier codeImage.php
include "functions_inc.php";
createImageCode();
?>
Le formulaire
On ne va pas s'étaler sur le fonctionnement d'un formulaire. Un exemple est dispo dans cet article
Il est néanmoins nécessaire de savoir où et comment utiliser le codeImage.
Dans le formulaire, il faut ajouter un champ, précédé de l'affichage de l'imageCode :
<table>
<TR><TD colspan="2">Code de vérification </TD></TR>
<TR><TD><IMG SRC="codeImage.php"></TD>
<TD><INPUT TYPE="text" NAME="as_Code" VALUE=""></TD>
</TR>
</table>
Ensuite, lorsque l'on poste le formulaire, il suffira d'ajouter, avant la partie de traitement du formulaire les quelques lignes suivantes :
<?
include "functions_inc.php";
// si votre formulaire est en POST
$lb_verif = checkImageCode($_POST["as_Code"]);
// si votre formulaire est en GET
// $lb_verif = checkImageCode($_GET["as_Code"]);
if($lb_verif!=1)
die("Code de vérification incorrect");
?>
Remarques :
- Il est nécessaire que la bibliothèque GD soit installée
Discuter de cet article dans les forums. (0 Messages)
|