2014-01-22 93 views
1

我已經使用captcha進行表單註冊,其中我有validation engine表單內聯驗證。我堅持驗證captcha股權。在提交之前驗證captcha

<p class="veriText"> 
    <label>Enter the Verification Text </label> <span style="color:red;">*</span> 
    <input class="validate[required] text-input" type="text" name="captcha" id="captcha" class="text" value="" />     
</p> 
<img src="<?= get_bloginfo('template_url'); ?>/captcha_code_file.php?rand=<?php echo rand();?>" id='captchaimg'><br/> 

PHP驗證:(完美的作品)

if(strcasecmp($_SESSION['code'], $_POST['captcha']) != 0){ 
    //----mismatch values 
} 

但在JS同樣的事情,我已經試過像

var session = <?php echo $_SESSION['code'] ?>; // this value is different 
               // from captcha image 

是否有可能在提交表單之前驗證驗證碼使用Javascript/jQuery的?

+0

糾正我,如果我錯了,但驗證碼是對非botify的要求,如果你打算讓多個請求,然後切切實實的驗證碼可以繞過或欺騙的要求爲不依賴於一個單一的請求,如果你打算在源代碼中回顯代碼,情況會更糟。驗證與其他領域的驗證碼ect **服務器端**如果值無效使用jquery重新加載驗證碼,就像任何其他輸入。 –

回答

1

假設行var session = <?php echo $_SESSION['code'] ?>;在您的html頁面。

當頁面生成時,您的驗證碼圖像腳本不會被調用,因此$_SESSION['code']未初始化。您獲得的價值是從前一個請求到captcha_code_file.phpcode。一旦你的頁面被加載(至少是html部分)並且瀏覽器決定調用captcha_code_file.php你的驗證碼圖像被調用並且創建新的$_SESSION['code']

我並不推薦這樣做,但如果你想獲得當前$_SESSION['code']嘗試使用Ajax請求從另一個php文件檢索新$_SESSION['code'](不叫captcha_code_file.php或您的會話將被重新復位。

注意:不要試圖在用戶端來驗證您的驗證碼你擊敗驗證碼的主要目的

0

你可以把JavaScript代碼之前(雖然會議是在整個頁面相同) 試試看。在純文件中的虛擬代碼並檢查會話值 或 您可以使用$阿賈克斯()調用PHP頁面驗證碼驗證

0

HTML這個樣子

$rand = mt_rand(100000,999999); 
    <span class="captcha"><?php echo $rand; ?></span> 
    <input name="captcha" type="text" id="captcha-compare" /> 

在JavaScript中使用類似的東西進行驗證引擎

$('#frm-register').submit(function() { 
    if($('#captcha-compare').val() != $('.captcha').text()) { 
     $('#captcha-compare').validationEngine('showPrompt', 'Invalid captcha', 'load'); 
     return false; 
    } 
}); 

和在PHP中首先在會話中使用$ rand然後提交捕獲輸入文本captcha和會話

1

創建一個ajax檢查capcha的請求u唱的JavaScript,例如提供如下:

var postData = $("form").serialize(); 
var requestUrl = '/check_capcha.php'; 
     $.ajax({ 
      type: "POST", 
      dataType: "json", 
      data: postData, 
      url: requestUrl, 
      success:function(data){ 
       // success or fail message 

      } 
     }); 

check_capcha.php包含:

if(strcasecmp($_SESSION['code'], $_POST['captcha']) != 0){ 
    //----mismatch values 
echo 0; 
}else{ 
echo 1; 
} 
exit; 
0

你可以試試下面的代碼來驗證驗證碼,或者您也可以使用AJAX代碼提交之前驗證值代碼。

<script language="JavaScript"> 
    var session = '<?php echo $_SESSION['code'] ?>'; 
    if(Form.captcha.value == session) 
    { 
     return true; 
    } 
    else 
    { 
     Form.submit(); 
    } 
    </script>