Web Development Knowledge Base
| |
Sections :
RSS Feed 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 9191 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 |