<?php session_start(); ?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Captcha innovation</title>
</head>
<body>
<?php
if(isset($_POST['captcha'])){//Le formulaire est envoyé, on traite les données...
if($_POST['captcha']!=$_SESSION['captcha']){//si le captcha sélectionné n'est pas le bon
echo "Captcha incorrect!";//on stop le traitement
} else {
echo "Captcha correct!";
//on continu le traitement...
}
}
/**
La partie de code suivante doit impérativement être placée en dessous de la vérification des champs du formulaire, sinon le code sera toujours faux lors de sa vérification car il sera toujours un nouveau code
**/
//si le formulaire n'est pas encore été cliqué, on défini le captcha
$NombreDeCaractCode=4;//vous pouvez définir ici combien vous souhaitez avec de caractères pour chaque code
$NombreDeCodes=5;//vous pouvez définir ici combien vous souhaitez avoir de faux codes à choisir dans la liste déroulante
$CodeCaptcha=substr(str_shuffle("ABCDEFGHIJKLMNPQRSTUVWXYZ123456789"),0,$NombreDeCaractCode);//j'ai enlevé le O (lettre o) et le 0 (chiffre 0) volontairement car ils peuvent prêter à confusion
$_SESSION['captcha']=$CodeCaptcha;//pensez à bien initialiser la session avec "session_start();" tout en haut de votre page, avant n'importe quel balise HTML
$ListeCodes[]=$CodeCaptcha;//initiation du tableau qui contiendra tous les faux codes à choisir dans la liste
for($i=1;$i<=($NombreDeCodes-1);$i++){
$ListeCodes[]=substr(str_shuffle("ABCDEFGHIJKLMNPQRSTUVWXYZ123456789"),0,$NombreDeCaractCode);
}
shuffle($ListeCodes);//on mélange tous les codes
/**
Fin de la partie code à placé en dessous de la vérification des champs
**/
?><br/>
<form method="post">
<!-- ici les autres champs de mon formulaire -->
...ici le contenu de mon formulaire...
<br/>
<br/>
Choisissez le code <?php echo $_SESSION['captcha']; ?> dans la liste suivante:
<select name="captcha" onchange="this.form.submit()"><!-- avec onchange="this.form.submit()" on valide le formulaire dès qu'il à choisi le code! -->
<option>Choissiez le code affiché:</option>
<?php foreach($ListeCodes as $Code){ ?>
<?php echo '<option value="'.$Code.'">'.$Code.'</option>'; ?>
<?php } ?>
</select>
<input type="submit" name="valider" value="Valider"> <!-- on laisse le bouton valider au cas où le javascript ne serait pas activé sur le navigateur du visiteur -->
</form>
</body>
</html>
jean-luc adant le 27 Janvier 2019 à 15:38
Super simple et en une seule page
j'ai simplement remplacer la ligne .
-
echo "Captcha correct!";
Par
echo '<h3 align="center">texte - <a href="www.monsite.be">texte du lien</a><br /></h3>';exit;
-
merci
Nouha le 16 Avril 2019 à 23:29
j'essay ce code mais j'ai un p'tit problème :(
Parse error: syntax error, unexpected 'if' (T_IF) in C:\xampp\htdocs\captcha\contact.php on line 11
comment le résoudre ?!
admin le 17 Avril 2019 à 00:28
Bonjour, il vous faut regarder à la ligne 11 si votre condition if est correcte.
Parse error: syntax error, unexpected 'if' (T_IF) in C:\xampp\htdocs\captcha\contact.php on line 11
TT22 le 11 Janvier 2021 à 13:23
Ce captcha est totalement inutile.
Vous donnez la réponse en clair, il est donc très facile de sélectionner automatiquement la bonne réponse.
Ci-dessous un exemple en Javascript qui valide le captcha automatiquement :
var code = document.body.innerHTML.match(new RegExp('code (.*) dans'))[1];
document.getElementsByTagName('select')[0].value = code;
document.getElementsByTagName('form')[0].submit();
admin le 11 Janvier 2021 à 14:01
Bonjour, merci pour votre commentaire.
Je sais, mais ça limite le post par robots car il faut cliquer sur quelque chose.
TT22 le 11 Janvier 2021 à 14:04
Non ça ne limite pas les posts par des robots, le code que j'ai envoyé le montre bien ! Il valide le formulaire sans intervention humaine.
Dan le 09 Juin 2022 à 07:59
Je modifirais la session par ceci pour améliorer et complexifier un peu pour éviter les man-and-the-middle :
<?php echo substr($_SESSION['captcha'], rand(1, 5), -rand(3, 5)); ?>
Le code ne pourra pas être automatisé.