Suite au problème qu'il y a avec les captcha à image ( problème visuel ), j'ai fais 2 autres types de captcha.
Captcha n°1 :
Il génère une chaîne de x caractères aléatoire( minuscule, majuscule ), et un nombre aléatoire y.
La personne doit écrire le caractère qui se trouve à la position y de la chaîne x ( les minuscules sont différenciés des majuscules lors de la comparaison )
Captcha n°2 :
Un calcul aléatoire est généré (+,-,*,/) si c'est une division, le calcul doit être arrondi à l'entier par défaut ( un exemple s'affiche donc )
Source / Exemple :
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Captcha</title>
</head>
<body>
<?php
srand();
echo "<u>Captcha 1</u><br /><br />";
$caracteres = array('A','Z','E','R','T','Y','U','I','O','P','Q','S','D','F','G','H','J','K','L','M','W','X','C','V','B','N','a','z','e','r','t','y','u','i','o','p','q','s','d','f','g','h','j','k','l','m','w','x','c','v','b','n');
$mini = rand(5,10);
$maxi = rand(10,20);
$longueurdelachaine = rand($mini,$maxi);
for($i = 1; $i <= $longueurdelachaine; $i++)
{
$chaine .= $caracteres[rand(0,51)]; //on concatène à chaque fois la variable $chaine
}
$position = rand(5,$longueurdelachaine);
$indice = $position -1;
$_SESSION['resultatcaptcha1'] = substr($chaine, $indice, 1); //on extrait UN caractère à la position $indice
echo "Voici la chaîne de caractère : <b>$chaine</b><br />";
echo "Quel est le caractère à la position <b>$position</b> ?<br /><br />";
?>
<form method="post" action="verificationcaptcha1.php">
Votre réponse : <input type="text" name="reponsecaptcha1" value="" />
<input type="submit" value="Valider" />
</form>
<?php
echo "<br /><u>Captcha 2</u><br /><br /><br />";
$signes = array('-','+','*','/');
$nombre1 = rand(100,200);
$nombre2 = rand(1,100);
$lesigne = $signes[rand(0,3)];
$calcul = "$nombre1$lesigne$nombre2"; //pour afficher le calcul sans le calculer
echo "Combien font : <b>$calcul</b><br />";
if($lesigne == '/')
{
$resultat = $nombre1/$nombre2;
echo "Arrondissez à l'entier défaut.<br />";
echo "<u>Exemple</u><br /> Pour (0 <= x <= 4), 12.x donnera 12<br />Pour (5 <= x <= 9), 12.x donnera 13<br /><br />";
}
else
if($lesigne == '*')
$resultat = $nombre1*$nombre2;
else
if($lesigne == '+')
$resultat = $nombre1+$nombre2;
else
$resultat = $nombre1-$nombre2;
$_SESSION['resultatcaptcha2'] = round($resultat); //arrondi à l'entier par défaut.
?>
<form method="post" action="verificationcaptcha2.php">
Votre réponse : <input type="text" name="reponsecaptcha2" value="" />
<input type="submit" value="Valider" />
</form>
</body>
</html>
Conclusion :
Je n'ai pas réussi à faire afficher la réponse du calcul en mettant directement la variable du signe ($lesigne) dans la chaîne de calcul ($resultat).
C'est pourquoi j'ai fais des conditions... Si quelqu'un à la solution pour éviter de faire ses conditions, ça serait sympa qu'il m'en fasse part ^^
Voilà, j'attends vos remarques.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.