2014-01-22 7 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, чтобы перезагрузить captcha, как и любой другой вход. –

ответ

1

Предполагая, что линия var session = <?php echo $_SESSION['code'] ?>; находится на вашей html-странице.

Когда страница сгенерирована, ваш скрипт изображения captcha не вызывается, и поэтому $_SESSION['code'] не инициализируется. Вы получаете code от предыдущего запроса до captcha_code_file.php. Как только ваша страница загружается (по крайней мере, часть html), и браузер решает позвонить captcha_code_file.php, ваше изображение captcha будет вызвано, и будет создан новый $_SESSION['code'].

Я не рекомендую, но если вы хотите, чтобы получить текущий $_SESSION['code'] попробовать использовать запрос Ajax для получения нового $_SESSION['code'] из другого файла PHP (не называйте captcha_code_file.php или сеанс будет снова сбрасывается.

Примечание:.. никогда не пытайтесь проверить свой капчут на конечном пользователе Вы разгромив основную цель капчите

0

Вы можете поместить яваскрипт кода перед (хотя сеанс одинаков для всей страницы) Просто попробуйте. фиктивный код в обычном файле и проверить значение сеанса ИЛИ Вы можете использовать $ .ajax() для вызова 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> 
Смежные вопросы