2014-08-31 65 views
1

我使用歐芹實現了一個多步表單,我需要驗證一個recaptcha。 第一個問題是,recaptcha是由函數recaptcha_get_html($ publickey)生成的,所以我無法在輸入元素中手動添加屬性。不過我解決了使用.attr()上的window.onload()如下:香菜遠程Recaptcha驗證

 window.onload = function() { 
      $("#recaptcha_response_field").attr('data-parsley-group','block1'); 
      $("#recaptcha_response_field").attr('data-parsley-required','true'); 
      $("#recaptcha_response_field").attr('data-parsley-remote-message','Wrong Captcha'); 
      $("#recaptcha_response_field").attr('data-parsley-remote','lib/validateRecaptcha.php'); 

     }; 

要完成我需要傳遞到PHP文件中的兩個字段中的驗證:recaptchaChallengeField和recaptchaResponseField。

正如我所說,這是一個多步驟的形式...所以驗證表格我有這個邏輯附加到「下一步」按鈕,我添加了數據,香菜遠程選項如下:

$('.next').on('click', function() { 

     var current = $(this).data('currentBlock'), 
     next = $(this).data('nextBlock'); 

     $("#recaptcha_response_field").attr('data-parsley-remote-options','{"type": "POST", "dataType": "jsonp", "data": {"recaptchaChallengeField": "'+$("#recaptcha_challenge_field").val()+'", "recaptchaResponseField": "'+$("#recaptcha_response_field").val()+'"}}'); 


     // only validate going forward. If current group is invalid, do not go further 
     // .parsley().validate() returns validation result AND show errors 
     if (next > current) 
     if (false === $('#signup-form').parsley().validate('block' + current)) 
      return; 

// validation was ok. We can go on next step. 
     $('.block' + current) 
     .removeClass('show') 
     .addClass('hidden'); 

     $('.block' + next) 
     .removeClass('hidden') 
     .addClass('show'); 
    }); 

正如你所看到的,recaptchaResponseField是動態的...每當用戶按下「下一步」按鈕時,我都會捕獲該值。

這裏是我的PHP代碼:

require_once('recaptcha-php-1.11/recaptchalib.php'); 
      $privatekey = "private_key"; 
      $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptchaChallengeField"], $_POST["recaptchaResponseField"]); 

      if (!$resp->is_valid) 
      echo json_encode("404"); 
      else 
      echo json_encode("200"); 

的問題是,它沒有做任何事情......我不打字的ReCaptcha輸入內東西的時候得到任何錯誤消息。 有什麼問題? 我已經嘗試使用parsley.remote.js(.addAsyncValidator),但沒有任何反應,因爲... 我需要一些幫助。 Thx

+0

沒有人可以幫助我嗎? =/ – dan 2014-08-31 21:42:40

+0

您在'data-parsley-remote-options'屬性中使用''dataType「:」jsonp「'。我假設請求是對同一個域進行的,所以你應該改爲'json'。另外,您需要提供一些額外的細節:請求是否成功(您是否在控制檯中看到它)?如果你'var_dump($ _ POST)'它包含你的值除外? – 2014-09-01 17:04:10

回答

0

我認爲你的問題與CAPTCHA代有關。 以下行不起作用:

$("#recaptcha_response_field").attr('data-parsley-group','block1'); 
$("#recaptcha_response_field").attr('data-parsley-required','true'); 
$("#recaptcha_response_field").attr('data-parsley-remote-message','Wrong Captcha'); 
$("#recaptcha_response_field").attr('data-parsley-remote','lib/validateRecaptcha.php'); 

,因爲這些電話後,將創建領域,這些屬性都沒有關聯到#recaptcha_response_field。 您可以檢查頁面源代碼。

一種選擇是定義新的自定義主題,以避免自動生成HTML代碼。 https://developers.google.com/recaptcha/docs/customization?hl=fr