Php验证码返回旧的验证码值

时间:2014-02-19 13:40:10

标签: javascript php session captcha

我正在关注this验证码教程并获得部分成功,实际上我设法让它工作但现在我需要通过Javascript验证表单,以便我有以下PHP脚本。

<? session_start(); ?>

<html>
<head>
<title>TEST</title>
</head>
<body>

<?php                                                                                                                                
  echo "\n<script type=\"text/javascript\">";                                                                            
  echo "\n\tfunction validateCaptcha(captcha){ ";
  echo "\n\t alert(captcha); }";
  echo "\n</script>";                                                                                                                  
?>                                                                                                                                   

<form action=next.php method=get onsubmit="return validateCaptcha('<?php 
  $catp = $_SESSION['captcha'];
  echo $catp;
?>')"/>
  <img src="captcha.php" /><br />
  <input type="text" name="answer" placeholder="Enter captcha here" />
  <input type="submit" name="send" value="Send" />
</form>
</body>
</html>

问题在于,每次按下按钮发送表单都没有验证,因为验证码值是旧的,我一直在努力工作几个小时我无法弄清楚如何让它工作。对我来说这很奇怪,因为生成的Javascript代码具有良好的价值。

我也尝试使用隐藏变量,例如:

    <input id="checkCaptcha" name="checkCaptcha" type="hidden" value="<?php 
      $catp = $_SESSION['captcha']; echo $catp; ?>" /> 

但我没有成功。

顺便说一下,这是captcha.php代码:

<?php

session_start();

header("Expires: Tue, 01 Jan 2013 00:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';

for ($i = 0; $i < 5; $i++) 
{
    $randomString .= $chars[rand(0, strlen($chars)-1)];
}

$_SESSION['captcha'] = strtolower( $randomString );

$im = @imagecreatefrompng("captcha_bg.png"); 

imagettftext($im, 30, 0, 10, 38, imagecolorallocate ($im, 0, 0, 0), 'larabiefont.ttf', $randomString);

header ('Content-type: image/png');
imagepng($im, NULL, 0);
imagedestroy($im);
?>

我知道我可以使用reCaptcha但我希望以前解决它。

0 个答案:

没有答案