我正試圖在表單中實現一個驗證碼。會話變量在Jquery發佈的腳本中不可見?
共有三個文件:
html表單。
php captcha圖像生成器。
php captcha檢查器。
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腳本中生成。
我嘗試找回它,並檢查IM的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);
?>
請至少張貼captcha.php的相關部分。 – TNi
發表captcha.php – Ben
你的一些'$ POST'和'$ SESSION'變量缺少下劃線。這是複製/粘貼錯誤還是? –