2011-06-25 14 views
0

私はフォームに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); 
    ?> 
+0

少なくともcaptcha.phpの関連部分を投稿してください。 – TNi

+0

Posted captcha.php – Ben

+0

あなたの '$ POST'変数と' $ SESSION'変数の中にアンダースコアがありません。これはコピー/ペーストエラーですか? –

答えて

1

あなた$POST$SESSION変数の一部が欠落しているアンダースコア。あなたのコメントで述べたように、これは問題であるようです。

この場合、PHPの構文強調表示をサポートするテキストエディタを使用することをお勧めします。このようなエラーは簡単に識別できます。

+0

私はメモ帳++を今使っています...私はZendスタジオが好きですが、私の試練は無く、私の会社は安いです。私はnotepad ++は非常に複雑な構文の強調表示をしているとは思わないし、その領域に何かを追加したプラグインは見ませんでした。しかし、私は間違いなくあなたに同意します。シンタックスエラーの強調表示は、このような単純なエラーのために役立ちます。 – Ben

関連する問題