Dicton du 15 Novembre:
Á la saint Léopold, couvre les épaules.

Télécharger
Noter:
3.3/5

Captcha simple en PHP

Description

Les codes de sécurités sur les formulaires des pages web sont importants car ils permettent vérifier si c'est pas un robot, l'humain doit recopier un code (souvent en image) dans un champ spécifique.

Cette image captcha est générée via PHP, le code source est simple et super facile d'utilisation, voici le code:

Code source (PHP)

<?php
session_start();//on enregistre la session, pour le code, pour la vérification du formulaire
//le fichier se nomme: image.php
//on indique au header qu'il faut afficher le code en tant qu'image
header('Content-Type: image/png');
$largeur=80;//largeur de l'image
$hauteur=25;//hauteur de l'image
$lignes=10;//nombre de lignes multicolore qui seront affichées avec le code (10 est bien)
$caracteres="ABCDEF123456789";//type de caractère du code qui sera affiché dans l'image
//on crée le rectangle
$image = imagecreatetruecolor($largeur, $hauteur);
//on met un fond en blanc (255,255,255)
imagefilledrectangle($image, 0, 0, $largeur, $hauteur, imagecolorallocate($image, 255, 255, 255));
//on ajoute les lignes
function hexargb($hex) {//fonction qui permet de retourner la valeur en RGB d'une couleur hexadécimale
return array("r"=>hexdec(substr($hex,0,2)),"g"=>hexdec(substr($hex,2,2)),"b"=>hexdec(substr($hex,4,2)));//on retourne la valeur sous forme d'array
}
for($i=0;$i<=$lignes;$i++){
$rgb=hexargb(substr(str_shuffle("ABCDEF0123456789"),0,6));//choisi une couleur aléatoirement (str_shuffle), de 6 caractères (substr(chaine,0,6)) avec la sélection alphanumérique
imageline($image,rand(1,$largeur-25),rand(1,$hauteur),rand(1,$largeur+25),rand(1,$hauteur),imagecolorallocate($image, $rgb['r'], $rgb['g'], $rgb['b']));
}
$code1=substr(str_shuffle($caracteres),0,4);
$_SESSION['code']=$code1;//on enregistre le code dans une session pour vérifier ensuite se qu'à entré le visiteur est identique
$code="";//on initialise le code
for($i=0;$i<=strlen($code1);$i++){
$code .=substr($code1,$i,1)." ";//on rajoute des espace entre chaque lettre ou chiffre pour faire plus aéré (notez le . devant = qui permettra d'ajouter un caractère après l'autre à $code)
}
//on écrit le code dans le rectangle
imagestring($image, 5, 10, 5, $code, imagecolorallocate($image, 0, 0, 0));
//on affiche l'image
imagepng($image);
//puis on détruit l'image pour libérer de l'espace
imagedestroy($image);
?>

La partie formulaire avec le code à entrer (partie PHP qui sera au dessus du code HTML):

Code source (PHP)

//page contact.php
session_start();
if(isset($_POST['captcha'])){
if($_POST['captcha']==$_SESSION['code']){
echo "Code correct";
} else {
echo "Code incorrect";
}
}

En fin, le formulaire:

Code source (HTML)

<!-- page contact.php -->
<form action="contact.php" method="post">
<input type="text" name="captcha"/>
<input type="submit"/>
<img src="image.php" onclick="this.src='image.php?' + Math.random();" alt="captcha" style="cursor:pointer;">
</form>


Math.random() nous permet de demander une nouvelle image car elle fait en sorte de recharge l'image par une autre en disant que c'est pas la même, on rajoute juste du code du style image.php?0.9610655198268976
Math.random() en JavaScript permet d'afficher un chiffre de type flottant, de 0 à 1 (1 n'est jamais affiché vu que c'est un nombre à virgule)


style="cursor:pointer;" affiche une main au lieu de la flèche classique, au survol du code, côté esthétique, je trouve ça plus jolie.

Un aperçu:



Commentaires

Merci pour ces informations

J'utilise ce script dans mon site mais quand je fais if isset ....
Le $post ne marche pas.

Je n'utilise pas le header parce que ça affiche que l'image sans le input zones


P.s: le script est fait include et avant ce script j'utilise head où il y a déjà session start

Quel erreur avez-vous à l'écran quand vous postez le formulaire ?

Je n'ai pas d'erreur mais ça n'affiche pas les input et les labels, vu qu'il y a

header(type image/png)

Cordialement.

Bonjour, le code du captcha est un fichier appart, il se nomme image.php, pas besoin d'include se fichier il sera appelé avec l'affichage de l'image:

...<img src="image.php" onclick="thi...

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée


ATTENTION! Ce formulaire est exclusivement réservé aux commentaires
Pour toutes demandes d'aide, veuillez ajouter votre demande sur le forum svp

Captcha * sept - 2 =

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter