我正在尝试将验证码实现为表单。
有三个文件:
html表单。
php验证码图像生成器。
php captcha checker。
Everythiong工作正常,但我似乎无法在我的验证码检查器脚本上检索验证码脚本创建的Session变量。
表格形式:
<img src="captcha/captcha.php"></img>
<input type="text" id="CAPTCHA"><p id="caperror"></p>
<p><input name="B1" type="submit" value="Submit" />
</form>
<script>
$('#contactform').submit(function () {
var cap = $('#CAPTCHA').val();
cap = 'CAPTCHA=' + cap;
$.ajax({
type: 'POST',
url: 'captcha/capcheck.php',
data: cap,
success: success,
dataType: "text",
error: postfail
});
});
function success(result) {
if (result == 'true') {
alert('Correct');
return true;
} else {
alert(result);
return false;
}
}
function postfail() {
alert('post failed');
return false;
}
</script>
会话变量['CAPTCHA']在captcha.php脚本中生成。
我尝试检索它,并使用以下命令检查capcheck.php脚本:
<?php
session_start();
if($SESSION['CAPTCHA']) {
echo 'session='.$SESSION['CAPTCHA'];
}
if((isset($POST['CAPTCHA'])) && (isset($SESSION['CAPTCHA']))){
if($_SESSION['CAPTCHA'] != $_POST['CAPTCHA']) {
echo 'false';
} else {
session_destroy();
echo 'true';
}
}
else{
echo $_POST['CAPTCHA'].' '. $SESSION['CAPTCHA'];
session_destroy();
}
?>
它总是空的,我不知道为什么!我在没有jquery的情况下,在不同的网站上实现它,并且它完美地运行。
Captcha.php:
<?php
session_start();
/**
* Send PNG headers to the browser
**/
header('content-type: image/png');
$numbers = array();
$numbers[] = rand(1, 5);
$numbers[] = rand(1, 5);
if(rand(0, 1) == 0) {
$_op = '+';
$code = strval($numbers[0]) .' + ' .strval($numbers[1]) .' =';
$_SESSION['CAPTCHA'] = $numbers[0] + $numbers[1];
} else {
$_op = '+';
$code = strval($numbers[0]) .' + ' .strval($numbers[1]) .' =';
$_SESSION['CAPTCHA'] = $numbers[0] + $numbers[1];
}
session_write_close();
/* Our TTF font file, you may use others */
$font = dirname(__FILE__) .'/fonts/arial.ttf';
/* set the width */
$width = 16;
//$width = (strlen($code) * $width) + 2;
$height = 24;
$code_length = 7;
$image_height = $height + 2;
$image_width = $width * $code_length + 20;
$im = imagecreatetruecolor($image_width, $image_height);
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
/* Some themes */
$theme = array();
$theme[] = array('CHAR_COLOR' =>
array('R' => array(56, 21),
'G' => array(85, 25),
'B' => array(14, 195)
),
'BG_COLOR' =>
array('R' => array(12, 76),
'G' => array(54, 67),
'B' => array(26, 23)
)
);
$theme[] = array('CHAR_COLOR' =>
array('R' => array(59, 72),
'G' => array(35, 55),
'B' => array(65, 63)
),
'BG_COLOR' =>
array('R' => array(30, 55),
'G' => array(70, 30),
'B' => array(70, 30)
)
);
$theme[] = array('CHAR_COLOR' =>
array('R' => array(76, 25),
'G' => array(38, 50),
'B' => array(58, 78)
),
'BG_COLOR' =>
array('R' => array(94, 30),
'G' => array(97, 30),
'B' => array(30, 55)
)
);
$pos_x = 5;
$pos_y = 20;
$random = rand(0, (count($theme) - 1) );/* Get a random theme */
/**
* Place each character into the image
**/
$angle = 0;
$size = 16;
for($i = 0, $count = strlen($code); $i < $count; $i++) {
$color = imagecolorallocate($im,
rand($theme[$random]['CHAR_COLOR']['R'][0], $theme[$random]['CHAR_COLOR']['R'][1]),
rand($theme[$random]['CHAR_COLOR']['G'][0], $theme[$random]['CHAR_COLOR']['G'][1]),
rand($theme[$random]['CHAR_COLOR']['B'][0], $theme[$random]['CHAR_COLOR']['B'][1])
);
imagettftext($im, $size, $angle, $pos_x, $pos_y, $color, $font, $code{$i});
$pos_x += $width + 1;
}
/* Finally show image */
imagepng($im);
imagedestroy($im);
?>
答案 0 :(得分:1)
您的部分$POST
和$SESSION
变量缺少下划线。正如你的评论中所提到的,这似乎是个问题。
在这种情况下,我建议使用带有正确语法高亮支持PHP的文本编辑器,以便轻松识别这些错误。