I'm trying to implement a captcha into a form.
There are three files:
the html form.
The php captcha image generator.
the php captcha checker.
Everythiong is working fine, but I can't seem to retrieve the Session variable, that the captcha script creates, on my captcha checker script.
In the form:
<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>
The session Variable ['CAPTCHA'] is generated in the captcha.php script.
I try to retrieve it, and check it im the capcheck.php script with this:
<?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();
}
?>
It is always empty, and I don't know why! I have it implemented without jquery, on a different site, and it works perfectly.
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, $angl开发者_StackOverflow社区e, $pos_x, $pos_y, $color, $font, $code{$i});
$pos_x += $width + 1;
}
/* Finally show image */
imagepng($im);
imagedestroy($im);
?>
Some of your $POST
and $SESSION
variables are missing underscores. As mentioned in your comments, this seems the be the issue.
I'd suggest using a text-editor with proper syntax highlighting support for PHP in this case, so errors like these are easily identified.
精彩评论