Hi all, 

I try to implement a custom captcha element: the user sees a number spelled
out (ie 'twenty' and is supposed to give the numerical equivalent: 20). If
he passes that test, he is supposed to be human.

This is the code for my custom element:
<?php
class Elements_Randcap extends Zend_Form_Element_Text
{

        private $numbers = array();
        private $numberToCheck;

        public function init ()
        {

                $this->numbers = 
array("nul","een","twee","drie","vier","vijf","zes");
//much longer array needed
                $this->numberToCheck = floor(rand(0,count($this->numbers)-1));
                $captcha = $this->numbers[$this->numberToCheck];
                $this->setLabel('Typ dit getal in cijfers:<strong>' . $captcha .
'</strong>');
                
$this->addValidator('Randcap',false,array($this->numberToCheck));
        }
}
?>
This is my custom validator

<?php
class Validators_Randcap extends Zend_Validate_Abstract {
    const IS_BOT = 'NoBlog';

    protected $_messageTemplates = array(self::IS_BOT => 'Het antispam getal
was niet juist ingevuld');

    /**
     * The integer that is passed by the form
     *
     * @var int
     */
    protected $_captcha;

    /**
     *
     * @param int numberToCheck
     */
    public function __construct($numberToCheck) {
        $this->_captcha = $numberToCheck;
    }

    /**
     * Check if the element using this validator is valid
     *
     *
     * @param $value string
     * @return boolean Returns true if the element is valid
     */
    public function isValid($value) {
        $value = (int) $value;
        $this->_setValue($value);
        $error = false;
        if ($this->_captcha != $value) {
            $error = true;
            $this->_error(self::IS_BOT);
            $errorMessage = 'Het antispam getal was niet juist ingevuld';
            $this->setMessage($errorMessage, self::IS_BOT);
        }

        return !$error;
    }
}
?>

However, this doesn't work. It seems as if the validator is called twice:
once upon instantiating the form, the element generates a captcha number.
And when I check the post in my controller (with $form->isValid), it seems
as if another captcha number is evaluated.

What should I do to solve this problem?

Thanks for any help!


-- 
View this message in context: 
http://www.nabble.com/custom-form-captcha-problem-tp24210371p24210371.html
Sent from the Zend Framework mailing list archive at Nabble.com.

Reply via email to