在提交之前验证验证码

时间:2014-01-22 04:59:20

标签: javascript php jquery validation captcha

我已使用captcha进行表单注册,我有validation engine表单内联验证。我一直在验证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中提交表单之前是否可以验证验证码?

5 个答案:

答案 0 :(得分:1)

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

生成页面时,不会调用验证码图像脚本,因此$_SESSION['code']未初始化。您获得的值是前一个请求code的{​​{1}}。加载页面后(至少是html部分),浏览器决定调用captcha_code_file.php,调用验证码图像并创建新的captcha_code_file.php

我不建议这样做,但如果你想让当前的$_SESSION['code']尝试使用Ajax请求从另一个php文件中检索新的$_SESSION['code'](不要调用{{1}或者你的会话将再次重置。

注意:切勿尝试在用户端验证验证码。你正在击败验证码的主要目的。

答案 1 :(得分:1)

使用JavaScript创建一个用于检查capcha的ajax请求,示例如下:

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;

答案 2 :(得分:0)

您可以在之前输入javascript代码(尽管整个页面的会话相同)。 只需在普通文件中尝试虚拟代码并检查会话值 要么 您可以使用$ .ajax()来调用PHP页面进行验证码验证

答案 3 :(得分: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然后提交捕获输入文本验证码和会话

答案 4 :(得分:0)

您可以尝试以下代码来验证验证码,或者您也可以在提交代码之前使用AJAX代码验证值。

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