Web Development Knowledge Base
| |
Sections :
You too, please publish your useful code snippets in any programming language : write an article ! Plateforme d'envoi de gros fichiers en ligne Dépannage site web Blog infogérance Hébergement e-mail |
Aurélie Dufour - - 21/03/2008 - vue 9500 fois
Script PHP anti-robot facile à utiliser (captcha)Cette fonction php génère une image PNG, qui contient 5 caractères que l'internaute doit recopier avant de valider un formulaire par exemple (captcha) :
<?
session_start();
//la fonction ci-dessous prend en paramètres le nombre de caractères à générer
function chaineAleatoire($nombre = 5)
{
$chaine = '';
for($i = 0; $i < $nombre; $i++)
{
$chaine .= mt_rand(0,9);
}
return $chaine;
}
function image($chaine)
{
$largeur = (strlen($chaine) * 10); // Environ la largeur d'un caractere
$hauteur = 20; // La bonne hauteur
$image = imagecreate($largeur,$hauteur);
$blanc = imagecolorallocate($image, 255, 255, 255); // On colore tout en blanc
$noir = imagecolorallocate($image, 0, 0, 0);
$milieuHauteur = ($hauteur / 2) - 8; // Pour centrer le texte en hauteur
imagestring($image, 6, (strlen($chaine) / 2 ), $milieuHauteur, $chaine, $noir); // On ecrit au milieu
ImageRectangle ($image, 1, 1, $largeur - 1, $hauteur - 1, $noir); // Le rectangle autour pour l'esthétique
$hauteur1 = mt_rand(2,$hauteur); // Barre aléatoire
$hauteur2 = mt_rand(2,$hauteur); // Fin de la barre aléatoire
ImageLine ($image, 2,$hauteur1, $largeur - 2, $hauteur2, $noir); // Barre aléatoire
ImageLine ($image, 2, $milieuHauteur + 8, $largeur - 2, $milieuHauteur + 8, $noir); // Barre standard
imagepng($image); // On dessine
imagedestroy($image);
return $chaine;
}
$nbr = 5; // on veut 5 chiffres aléatoires
$chaine = chaineAleatoire($nbr); // génération de la chaine
$_SESSION['chaine'] = md5($chaine); // on crypte la bonne valeur et on la met dans la session
header("Content-type: image/png");
imagepng($chaine); // on affiche l'image avec la chaine obtenue.
?>
Pour faire appel à cette fonction, vous n'avez même pas besoin de faire un include : faites comme si vous insériez une image toute simple en HTML : <img src="captcha.php" alt="code anti-bot"> <input name="code" type="text" value=""> Ce qui affiche dans votre page Web quelque chose du type :
Pour finir, au début du script PHP qui recoit les données du formulaire, vérifiez la validité du code recopié par l'utilisateur :
<?php
session_start();
$code = $_POST["code"];
if(md5($code) != $_SESSION['chaine']) die("Erreur: code incorrect !");
... suite de votre code ...
Zendik - 11/09/2008
2 petites erreurs, me semble-t-il :1) function chaineAleatoire($nombre = 5) le "=5" est inutile car un nombre est passé en paramètre lors de l'appel de la fonction : $nbr = 5; // on veut 5 chiffres aléatoires $chaine = chaineAleatoire($nbr); // génération de la chaine 2) imagepng($chaine); // on affiche l'image avec la chaine obtenue. ici c'est notre fonction de création d'image que l'on veut appeler (c'est elle qui appellera imagepng(), d'où : image($chaine); // on affiche l'image avec la chaine obtenue.
foufou - - 12/07/2009
ça ne fonctionne pas
ok oui - 18/08/2010
Aucune image ne s'affiche
Bipbip - 02/03/2015
Pour que le code fonctionne :Remplacer : imagepng($chaine); // on affiche l'image avec la chaine obtenue. par : image($chaine); // on affiche l'image avec la chaine obtenue. enjoy ;) |
| Nos partenaires : iPhone 8 Cases & Protection | |