J'ai créé un captcha text simple mais je n'arrive jamais à avoir un résultat correct.


<?php
session_start();
$text = rand(10000,99999);
$_SESSION["captcha"] = $text;
?>

<?php

if(isset($_POST['captcha'])) {
if($_POST['captcha'] !== $_SESSION['captcha']) {

die('Code incorrect!');
}
else {
echo 'code correct!';
}
}
echo $_SESSION['captcha'];
?>
<form method="post">
		<input type="text" name="captcha" />
		<input type="submit" value="test" />
</form>


J'ai besoin d'aide pour corriger ça. Et ça peut servir à d'autre qui en veut un.

merci d'avance.
Modifié par dan4 (24 May 2010 - 07:15)
Bonjour,

<?php
session_start();
if(isset($_SESSION["captcha"])) {
}
else {
	$_SESSION["captcha"] = rand(10000,99999);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Document sans titre</title>
</head>
<body>
<?php
if(isset($_POST['captcha'])) {

if($_POST['captcha'] != $_SESSION["captcha"]) {

die('Code incorrect!');

}

else {

echo 'code correct!';

}

}
echo $_SESSION['captcha'];

?>

<form method="post">

		<input type="text" name="captcha" />
                <input type="submit" value="test" />

</form>
</body>
</html>

il semblerait qu'il faut d'abord que tu testes si ta variable de session existe sinon quand tu soumets le formulaire il en fait une autre donc forcément ton code ne peut pas être le même.
Mais je peux me tromper
Bonjour jjmortibus, merci, je vais regarder votre solution. En attendant, j'en ai trouvé une autre mais dans le but de perfectionner mon apprentissage, je vais examiner ce code.

Smiley cligne


<?php
session_start();
if(isset($_SESSION["captcha"])) {
}
else {
	$_SESSION["captcha"] = rand(10000,99999);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Document sans titre</title>
</head>
<body>
<?php
if(isset($_POST['captcha'])) {

if($_POST['captcha'] != $_SESSION["captcha"]) {

die('Code incorrect!');

}

else {

echo 'code correct!';

}

}
echo $_SESSION['captcha'];

?>

<form method="post">

		<input type="text" name="captcha" />
                <input type="submit" value="test" />

</form>
</body>
</html>

il semblerait qu'il faut d'abord que tu testes si ta variable de session existe sinon quand tu soumets le formulaire il en fait une autre donc forcément ton code ne peut pas être le même.
Mais je peux me tromper
Modifié par Mikachu (25 May 2010 - 09:29)
Bon, finalement, j'ai revu mon codage.

Tu te trompe pas à propos du test sur la variable. c'est ce qui me manquait.

Mais, j'ai fini par améliorer le code et le voici :


$codevalide = null;

if(!isset($_SESSION['captcha'])||!isset($_POST['captcha'])){
null;
}
else{
if ( $_SESSION['captcha'] == (int)$_POST['captcha'] ) { 
unset($_SESSION['captcha']); 

....le code protégé par le captcha....

} else { $codevalide = '<span style="font-size:14px;">Indiquer un code valide!</span>';  }} // captchafin

.... formulaire ....
  <label for="captcha"><span style="font-size:14px;">Code anti-spam (<?php echo $_SESSION['captcha']; ?>) : </label><input type="text" name="captcha" id="captcha" size="3" maxlength="3" /><br /><br />

Voilà. Merci de m'avoir éclairé!





jjmortibus a écrit :
Bonjour,

<?php
session_start();
if(isset($_SESSION["captcha"])) {
}
else {
	$_SESSION["captcha"] = rand(10000,99999);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Document sans titre</title>
</head>
<body>
<?php
if(isset($_POST['captcha'])) {

if($_POST['captcha'] != $_SESSION["captcha"]) {

die('Code incorrect!');

}

else {

echo 'code correct!';

}

}
echo $_SESSION['captcha'];

?>

<form method="post">

		<input type="text" name="captcha" />
                <input type="submit" value="test" />

</form>
</body>
</html>

il semblerait qu'il faut d'abord que tu testes si ta variable de session existe sinon quand tu soumets le formulaire il en fait une autre donc forcément ton code ne peut pas être le même.
Mais je peux me tromper