2009-12-11 12 views
7

मुझे अपने जेडएफ एप्लिकेशन में एक फॉर्म में रीकैप्चा डालने की ज़रूरत है। मैं आधिकारिक दस्तावेज़ीकरण का पालन करने की कोशिश कर रहा हूं, लेकिन रीकैप्चा सेवा हमेशा मुझे 'गलत-कैप्चा-सोल' त्रुटि देता है। कोड मैं उपयोग कर रहा हूँ:ज़ेंड फ्रेमवर्क और रीकैप्चा

(प्रपत्र में)

// configure the captcha service 
$privateKey = 'XXXXXXXXXXXXXXXXXXX'; 
$publicKey = 'YYYYYYYYYYYYYYYYYYYY'; 
$recaptcha = new Zend_Service_ReCaptcha($publicKey, $privateKey); 

// create the captcha control 
$captcha = new Zend_Form_Element_Captcha('captcha', 
           array('captcha' => 'ReCaptcha', 
             'captchaOptions' => array(
              'captcha' => 'ReCaptcha', 
              'service' => $recaptcha))); 

$this->addElement($captcha); 

(नियंत्रक में)

$recaptcha = new Zend_Service_ReCaptcha('YYYYYYYYYYYYY', 'XXXXXXXXXXXXXXX'); 

$result = $recaptcha->verify($this->_getParam('recaptcha_challenge_field'), 
          $this->_getParam('recaptcha_response_field')); 

if (!$result->isValid()) { 
    //ReCaptcha validation error 
} 

किसी भी मदद कृपया?

उत्तर

20

आप चेक बनाने के लिए फॉर्म से अलग तत्व क्यों खींचते हैं?

फार्म

<?php 
class Default_Form_ReCaptcha extends Zend_Form 
{ 
    public function init() 
    { 
     $publickey = 'YOUR KEY HERE'; 
     $privatekey = 'YOUR KEY HERE'; 
     $recaptcha = new Zend_Service_ReCaptcha($publickey, $privatekey); 

     $captcha = new Zend_Form_Element_Captcha('captcha', 
      array(
       'captcha'  => 'ReCaptcha', 
       'captchaOptions' => array('captcha' => 'ReCaptcha', 'service' => $recaptcha), 
       'ignore' => true 
       ) 
     ); 

     $this->addElement($captcha); 

     $this->addElement('text', 'data', array('label' => 'Some data')); 
     $this->addElement('submit', 'submit', array('label' => 'Submit')); 
    } 
} 

नियंत्रक

$form = new Default_Form_ReCaptcha(); 

if ($this->getRequest()->isPost()===true) { 
    if($form->isValid($_POST)===true) { 
     $values = $form->getValues(); 
     var_dump($values); 
     die(); 
    } 
} 

$this->view->form = $form 

देखें

echo $this->form; 

यह: यह कैसे मैं यह कर रहा है यहां काफी पारदर्शी कोड है। जब फॉर्म का वैध है() निष्पादित किया जाता है, तो यह उसके सभी तत्वों को मान्य करता है और केवल तभी सत्य होता है जब उनमें से प्रत्येक वैध है।

एक निश्चित रूप से यह सुनिश्चित करता है कि आप जिस कुंजी का उपयोग कर रहे हैं वह उस डोमेन से प्रासंगिक है जहां आप यह कोड चलाते हैं।

यदि आपके कोई और प्रश्न हैं तो मुझे बताएं।

+0

आप सही हैं! बहुत धन्यवाद! तुमने मुझे बचाया! :) – Stefano

16

मैं the zend site पर त्वरित शुरुआत का अनुसरण कर रहा था, और मेरे लिए निम्नलिखित 'फिलेट' कैप्चा से बहुत तेज परिवर्तन था।

$this->addElement('captcha', 'captcha', array(
     'label' => 'Please enter two words displayed below:', 
     'required' => true, 
     'captcha' => array(
      'pubkey' => '---your public key here---', 
      'privkey' => '---your private key here---', 
      'captcha' => 'reCaptcha' 
     ) 
    )); 
+4

+1 - स्वीकृत उत्तर –

+0

से बहुत आसान यह स्वीकार्य उत्तर होना चाहिए। मैंने इसका इस्तेमाल किया, और यह पूरी तरह से काम किया। ReCaptcha के लिए सबसे आसान तरीका। धन्यवाद दोस्त;) –

+0

+1 महान जवाब :) –

संबंधित मुद्दे