2009-12-11 14 views
7

Ich muss ReCaptcha in ein Formular in meiner ZF-Anwendung einfügen. Ich versuche, der offiziellen Dokumentation zu folgen, aber der ReCaptcha-Dienst gibt mir immer den Fehler 'incorrect-captcha-sol' zurück. Der Code Ich verwende:Zend Framework und ReCaptcha

(in Form)

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

(im Controller)

$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 
} 

Jede Hilfe bitte?

Antwort

20

Warum ziehen Sie ein separates Element aus dem Formular, um eine Überprüfung vorzunehmen? Dies ist, wie ich dies tun:

Formular

<?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')); 
    } 
} 

-Controller

$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 

Ansicht

echo $this->form; 

Diese ist hier ziemlich transparenter Code. Wenn isValid() des Formulars ausgeführt wird, überprüft es alle seine Elemente und gibt nur dann true zurück, wenn jeder dieser Werte gültig ist.

Natürlich stellen Sie sicher, dass die von Ihnen verwendeten Schlüssel für die Domäne relevant sind, in der Sie diesen Code ausführen.

Lassen Sie mich wissen, wenn Sie weitere Fragen haben.

+0

Sie haben Recht! Danke vielmals! Du hast mich gerettet! :) – Stefano

16

Ich folgte dem schnellen Start bei the zend site, und für mich war das folgende viel schnellere Änderung vom "Figlet" captcha.

$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 - viel einfacher als die angenommene Antwort –

+0

Dies sollte die akzeptierte Antwort sein. Ich habe es benutzt und es hat perfekt funktioniert. Der einfachste Weg für ReCaptcha. Danke Kumpel;) –

+0

+1 große Antwort :) –