2014-08-31 5 views
1

파슬리를 사용하여 다중 단계 양식을 구현했으며 재구성을 검증해야합니다. 첫 번째 문제는 recaptcha가 recaptcha_get_html ($ publickey) 함수에 의해 생성되므로 입력 요소 내에 수동으로 속성을 추가 할 수 없다는 것입니다. recaptchaChallengeField 및 recaptchaResponseField :파슬리 원격 재구성 유효성 검사

 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 파일을 두 개의 필드를 전달하는 데 필요한 검증을 수행하려면, 그럼에도 I는()과 같은 창로드() .attr 사용하여 다음 것을 해결.

제가 말했듯이 이것은 다중 단계 형식입니다 ... 양식을 검증하기 위해 "다음"버튼에이 로직을 첨부하고 다음과 같이 data-parsley-remote-options을 추가했습니다 :

$('.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는 동적입니다 ... 사용자가 "다음"버튼을 누를 때마다 값을 잡습니다. 나는 reCAPTCHA를 입력 내에서 뭔가를 입력 할 때 오류 메시지를 받게 해달라고 ...

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"); 

문제는 아무것도 안하고 있다는 것입니다 :

여기 내 PHP 코드입니다. 무엇이 문제 일 수 있습니까? 이미 parsley.remote.js (.addAsyncValidator)를 사용해 보았지만 아무것도 발생하지 않았습니다 ... 좀 도와주세요. Thx

+0

아무도 도와 줄 수 없습니까? =/ – dan

+0

'data-parsley-remote-options' 속성 내에''dataType ': "jsonp"'을 사용하고 있습니다. 나는 요청이 동일한 도메인에 대해 이루어진 것으로 가정하므로, 대신 그것을 'json'으로 변경해야합니다. 또한 몇 가지 추가 정보를 제공해야합니다. 요청이 성공적으로 이루어 졌습니까 (콘솔에 표시됩니까?)? 만약 당신이'var_dump ($ _ POST)'에 당신을 제외한 값을 포함하고 있다면? –

답변

0

귀하의 문제는 보안 문자 생성과 관련이 있다고 생각합니다. 다음 줄은 작동하지 않습니다 필드가 이러한 호출 후에 생성되기 때문에

$("#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

관련 문제