当前位置: 首页 > 知识库问答 >
问题:

Zend_Form验证码未验证

上官鸿祯
2023-03-14

我读过很多关于这方面的帖子,但我无法解决我的问题。当我试图验证zend表单验证码时,即使文本正确,也总是失败。下面是我的代码:

 public function contactAction()
{
    $this->view->form = new Forms_ContactForm();
}
class Forms_ContactForm extends Twitter_Form
{
public function init()
{
    $this->setAction( 'email/email/contact' );
    $this->setMethod('post');

    $this->addElement('text', 'strFirstName', array( 
            'required' => true,
            'label' => 'Your First Name' ) );

    $this->addElement('text', 'strLastName', array( 
            'required' => true,
            'label' => 'your Last Name' ) );

    $this->addElement('text', 'strEmail', array( 'validators' => array(
            array('EmailAddress') ),
            'required' => true,
            'label' => 'Your Email' ) );

    $this->addElement('textarea', 'strContent', array( 
            'required' => true,
            'label' => 'Your message' ) );

    $this->addElement('captcha', 'captcha', array(
            'label'      => 'Please enter the 5 letters displayed below:',
            'required'   => true,
                            'name'       => 'captchaField',
            'captcha' => 'image',
            'captchaOptions' => array(  
                            'captcha' => 'image',  
                            'font'=> 'static/font/arial.ttf',
                            'imgDir'=>'static/img/captcha',
                            'imgUrl'=> 'static/img/captcha/',
                    'wordLen' => 5,
                    'fsize'=>20,
                    'height'=>60,
                    'width'=>200,
                    'gcFreq'=>50,
                    'expiration' => 300)

            ));


    $this->addElement('submit', 'submit', array('class' => 'Submit') );
}
}
public function contactAction()
{
    if( $this->_request->isPost() )
    {
        $objForm = new Forms_ContactForm();

        if( $objForm->isValid($_POST) )
        {
            $arrParams = $this->_request->getParams();
            if( $arrParams['strFirstName'] && $arrParams['strLastName'] && $arrParams['strEmail'] && $arrParams['strContent'] ) 
            {
                $this->_objEmail = new Zend_Mail();
                $this->_objEmail ->setFrom( $arrParams['strEmail'] );
                $this->_objEmail ->setSubject( 'C' );
                $this->_objEmail ->setBodyHtml( 'Message from: '. $arrParams['strFirstName'] . ' ' . $arrParams['strLastName'] . 
                                                '<BR>eMail address: ' . $arrParams['strEmail'] . '<BR><BR>'
                                                . $arrParams['strContent'] );

                $this->_objEmail ->addTo( 'mail@gmail.com' );

                $this->view->bolSent = $this->_objEmail->send();
            }
        }
        else
            $this->view->form = $objForm;
    }
}

谢谢你的时间和帮助!!

我看到了一些不可靠的东西:当我在联系人操作中转储$_post时,我的结果是:

array
'strFirstName' => string 'fghjfghj' (length=8)
'strLastName' => string 'ffffffff' (length=8)
'strEmail' => string 'fvhkbno@biu.fr' (length=14)
'strContent' => string 'fewfew' (length=6)
'captchaField' => string 'cebfe69ead38dba86a6b557dc8853b24' (length=32)

我刚刚输入的验证码甚至出现了,取而代之的是验证码凯!!??

<div class="control-group">
   <label class="control-label required" for="captchaField-input">Please enter the 5  letters displayed below:</label>
   <div class="controls">
       <img width="200" height="60" src="static/img/captcha/ab2d15044a637338064b39cfd2675837.png" alt="">
       <input type="hidden" id="captchaField-id" value="ab2d15044a637338064b39cfd2675837" name="captchaField[id]">
       <input type="text" value="" id="captchaField-input" name="captchaField[input]">
       <input type="text" value="ab2d15044a637338064b39cfd2675837" id="captchaField" name="captchaField">
   </div>
</div>

我觉得我需要删除这个captchaField,但不知道如何到目前为止!

我可以用JS做到这一点,但必须有一个干净的方法来做到这一点!

再次编辑

 <input type="text" value="ab2d15044a637338064b39cfd2675837" id="captchaField" name="captchaField">

解决方案

在挣扎了很多之后,这里是解决方案(移除装饰器)!

$captcha = new Zend_Form_Element_Captcha('captchaField',
        array('label' => "Please enter the 5  letters displayed below:",
            'required'=>true,
            'captcha' => array(
            'captcha' => 'image',
            'font'=> 'static/font/arial.ttf',
            'imgDir'=>'static/img/captcha',
            'imgUrl'=> 'static/img/captcha/',
            'wordLen' => 5,
            'fsize'=>20,
            'height'=>60,
            'width'=>200,
            'gcFreq'=>50,
            'expiration' => 300
        )
    ));

    $this->addElement($captcha);    
    $this->getElement('captchaField')->removeDecorator("viewhelper");

共有1个答案

农鸿德
2023-03-14

在挣扎了很多之后,这里有一个解决方案(我只是不得不删除装饰器)!

$captcha = new Zend_Form_Element_Captcha('captchaField',
    array('label' => "Please enter the 5  letters displayed below:",
        'required'=>true,
        'captcha' => array(
        'captcha' => 'image',
        'font'=> 'static/font/arial.ttf',
        'imgDir'=>'static/img/captcha',
        'imgUrl'=> 'static/img/captcha/',
        'wordLen' => 5,
        'fsize'=>20,
        'height'=>60,
        'width'=>200,
        'gcFreq'=>50,
        'expiration' => 300
    )
));

$this->addElement($captcha);    
$this->getElement('captchaField')->removeDecorator("viewhelper");

感谢哈龙的帮助和您的时间:)

 类似资料:
  • 接口说明 验证验证码 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/check

  • X1.6.0新增 sp_check_verify_code() 功能: 验证码检查,验证完后销毁验证码增加安全性 参数: 无 返回: 类型boolean true|false; 使用: <?php if(!sp_check_verify_code()){ echo '验证码不正确'; } 注:表单提交时验证码name为verify;支持POST和GET方法

  • X2.3.0新增(暂时无法使用) sp_check_mobile_verify_code($mobile='',$verifycode='') 功能: 手机验证码检查,验证完后销毁验证码增加安全性 参数: $mobile: 手机号 $verifycode:验证码 返回: 类型boolean true:手机验证码正确,false:手机验证码错误 使用: $is_right_mobile_code

  • Captcha中间件提供了验证码服务,他是一个 Tango 的插件。 安装 go get github.com/tango-contrib/captcha 示例 package main import ( "github.com/lunny/tango" "github.com/tango-contrib/captcha" "github.com/tango-contrib

  • 发送验证码支持 email 和 phone 非注册用户发送: POST /verifycodes/register 注册用户发送: POST /verifycodes 输入 名称 类型 描述 phone String 如果 email 不存在则必须,以 sms 模式给手机发送验证码。 email String 如果 phone 不存在则必须,以 mail 模式给邮箱发送验证码。 响应 Stat

  • 验证码验证 cmf_captcha_check($value, $id = "") 参数 $value:用户提交的验证码 $id:前台设置的验证码 id,默认为空,用户在前台只能定义整形的 id,最大为5 控制器使用 $captcha = $request->param('captcha'); if (cmf_captcha_check($captcha)) { echo "验证码正确"