私はフォームにcaptchaを実装しようとしています。Jqueryの投稿スクリプトでセッション変数が表示されませんか?
html形式のファイルが3つあります。
phpのcaptchaイメージジェネレータ。
phpのcaptchaチェッカー。
Everythiongは問題なく動作していますが、Captchaスクリプトが作成するセッション変数をキャプチャチェッカースクリプトで取得できないようです。形態において
:
<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);
?>
少なくともcaptcha.phpの関連部分を投稿してください。 – TNi
Posted captcha.php – Ben
あなたの '$ POST'変数と' $ SESSION'変数の中にアンダースコアがありません。これはコピー/ペーストエラーですか? –