2011-01-09 3 views
0

Ich habe ein bisschen ein seltsames Problem. Ich teste Zend aus und musste ein reCaptcha-Feld zu einem Formular hinzufügen. Ich folgte dem Beispiel in der Zend-Dokumentation, dass es nicht funktionierte (gewöhnungsbedürftig). Wurde der Fehler 'incorrect-captcha-sol' angezeigt.Zend - Recaptcha seltsames Problem - funktioniert aber nicht wie erwartet

Nach dem Lesen für eine Weile habe ich es endlich geschafft, es zu arbeiten. Es scheint jedoch, dass die isValid-Methode das Gegenteil von dem ergibt, was Sie erwarten würden. Hier

ist der Code:

Form:

class Application_Form_Album extends Zend_Form { 

public function init() { 


    ## Set Recapture 


    $this->setName('album'); 
    $this->setMethod('POST'); 
    $id = new Zend_Form_Element_Hidden('id'); 
    $id->addFilter('Int'); 
    $artist = new Zend_Form_Element_Text('artist'); 
    $artist->setLabel('Artist') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $title = new Zend_Form_Element_Text('title'); 
    $title->setLabel('Title') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $submit = new Zend_Form_Element_Submit('submit'); 
    $submit->setAttrib('id', 'submitbutton'); 


    //Change theme 
    $recaptcha = new Zend_Service_ReCaptcha("XXXXXXX","XXXXXXX"); 
    $recaptcha->setOption('theme', 'clean'); 
    $captcha = new Zend_Form_Element_Captcha('challenge', array('captcha' => 'ReCaptcha','captchaOptions' => array('captcha' => 'ReCaptcha','service' => $recaptcha))); 



    $this->addElements(array($id, $artist, $title, $captcha, $submit)); 
} 

}

und der Controller-Methode:

public function addAction() 
{ 



    $auth = Zend_Auth::getInstance(); 
    if ($auth->hasIdentity()) { 
     $form = new Application_Form_Album(); 
     $form->submit->setLabel('Add'); 
     $this->view->form = $form; 
     if ($this->getRequest()->isPost()) { 

       $formData = $this->getRequest()->getPost(); 
       if ($form->isValid($formData)) { 

        $captcha = new Zend_Service_ReCaptcha("XXXXXXX","XXXXXXX"); 
        $result = $captcha->verify($this->_getParam('recaptcha_challenge_field'), 
               $this->_getParam('recaptcha_response_field')); 

        if ($result->isValid()) { 
         //ReCaptcha validation error 
         #echo "CAPTCHA FAILED!<br>"; 

        } else { 
         $artist = $form->getValue('artist'); 
         $title = $form->getValue('title'); 
         $albums = new Application_Model_DbTable_Albums(); 
         $albums->addAlbum($artist, $title); 
         $this->_helper->redirector('index'); 
        } 


       } else { 
        $form->populate($formData); 
       } 
     } 
    } else { 
     $this->_helper->redirector('index','auth'); 
    } 

} 

Ich habe angenommen würde ($ result-> isValid ()) TRUE zurückgeben, wenn ein gültiges Captcha eingegeben wird. Nach einigem Haarziehen dachte ich $ result-> isValid() gibt FALSE zurück, wenn Captcha erfolgreich eingegeben wurde, und TRUE, wenn die falschen Wörter oder keine Wörter eingegeben wurden?

Fehle ich etwas? Wer weiß, warum das passieren könnte?

Antwort

0

Ich glaube nicht, dass Sie eine neue Zend_Service_ReCaptcha in Ihrem Controller erstellen müssen. Das Formular sollte sich darum kümmern. Versuchen Sie anstelle von if ($result->isValid()) {, das Captcha-Element aus dem Formular abzurufen und zu überprüfen, ob DAS gültig ist. Werfen Sie einen Blick auf das Beispiel in http://framework.zend.com/manual/en/zend.captcha.operation.html

Es aussehen könnte so etwas wie:

if ($form->getElement('challenge')->isValid() { 
Verwandte Themen