2011-06-25 61 views
0

我正試圖在表單中實現一個驗證碼。會話變量在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); 
    ?> 
+0

請至少張貼captcha.php的相關部分。 – TNi

+0

發表captcha.php – Ben

+0

你的一些'$ POST'和'$ SESSION'變量缺少下劃線。這是複製/粘貼錯誤還是? –

回答

1

你的一些$POST$SESSION變量缺少下劃線。正如您在評論中提到的那樣,這似乎是問題所在。

我建議在這種情況下使用帶有適當語法突出顯示支持PHP的文本編輯器,這樣很容易識別這些錯誤。

+0

我現在正在使用記事本++ ...我喜歡Zend工作室,但是我的試用用完了,而且我的公司很便宜。我不認爲notepad ++具有非常複雜的語法突出顯示,並且我沒有看到在該區域添加任何內容的插件。但我絕對同意你的看法,語法錯誤突出顯示對我這樣的簡單錯誤是有幫助的。 – Ben