Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend-form不';没有得到验证_Php_Validation_Zend Framework_Zend Framework2_Zend Form - Fatal编程技术网

Php Zend-form不';没有得到验证

Php Zend-form不';没有得到验证,php,validation,zend-framework,zend-framework2,zend-form,Php,Validation,Zend Framework,Zend Framework2,Zend Form,我试图在实际表单本身中验证表单,但它根本没有得到验证。如果我输入“someemail&*!([]@gmail.com”),它不会真的给出一句废话,而是继续前进。 表格: public function recoverPasswordAction() { $this->cache = new Container("cache"); $request = $this->getRequest(); $form = new Reco

我试图在实际表单本身中验证表单,但它根本没有得到验证。如果我输入“someemail&*!([]@gmail.com”),它不会真的给出一句废话,而是继续前进。 表格:

      public function recoverPasswordAction() {
        $this->cache = new Container("cache");
        $request = $this->getRequest();
        $form = new RecoverPasswordForm();
//      $form->get("submit")->setValue("Send mail");
        $this->view->form = $form;
        if ($request->isPost()) {
            $user = new User();
            $form->getInputFilter()->getValues();
            $form->setInputFilter($form->getInputFilter());
            $data = $request->getPost();
            $form->setData($data);
            $username = $data['username'];
            $userData = $this->getServiceLocator()->get("UserTable")->fetchList("`username` LIKE '$username'");
            if (!count($userData) > 0) {
                $this->cache->error = "A user with this email does not exist, plese try again.";
            }
                if ($form->isValid()) {
                    foreach ($userData as $user) {
                        $user->sendMail(6);
                        $this->cache->success = "A message has been send to this email, containing your password.";
                    }
                }
        }
        return $this->view;
    }
我如何获取(或试图获取)控制器中的过滤器和验证器:

      public function recoverPasswordAction() {
        $this->cache = new Container("cache");
        $request = $this->getRequest();
        $form = new RecoverPasswordForm();
//      $form->get("submit")->setValue("Send mail");
        $this->view->form = $form;
        if ($request->isPost()) {
            $user = new User();
            $form->getInputFilter()->getValues();
            $form->setInputFilter($form->getInputFilter());
            $data = $request->getPost();
            $form->setData($data);
            $username = $data['username'];
            $userData = $this->getServiceLocator()->get("UserTable")->fetchList("`username` LIKE '$username'");
            if (!count($userData) > 0) {
                $this->cache->error = "A user with this email does not exist, plese try again.";
            }
                if ($form->isValid()) {
                    foreach ($userData as $user) {
                        $user->sendMail(6);
                        $this->cache->success = "A message has been send to this email, containing your password.";
                    }
                }
        }
        return $this->view;
    }
像这样试试

      public function recoverPasswordAction() {
        $this->cache = new Container("cache");
        $request = $this->getRequest();
        $form = new RecoverPasswordForm();
//      $form->get("submit")->setValue("Send mail");
        $this->view->form = $form;
        if ($request->isPost()) {
            $user = new User();
            $form->getInputFilter()->getValues();
            $form->setInputFilter($form->getInputFilter());
            $data = $request->getPost();
            $form->setData($data);
            $username = $data['username'];
            $userData = $this->getServiceLocator()->get("UserTable")->fetchList("`username` LIKE '$username'");
            if (!count($userData) > 0) {
                $this->cache->error = "A user with this email does not exist, plese try again.";
            }
                if ($form->isValid()) {
                    foreach ($userData as $user) {
                        $user->sendMail(6);
                        $this->cache->success = "A message has been send to this email, containing your password.";
                    }
                }
        }
        return $this->view;
    }
$request = $this->getRequest();

$form = new Form();

if($request->isPost()) {
    if($form->isValid($reguest->getPost())) {
        $values = $form->getValues(); //filtered valid array of values

        $username = $form->getValue('username');


    }
}
$this->view->form = $form;

我认为这是因为验证器的错误实现

      public function recoverPasswordAction() {
        $this->cache = new Container("cache");
        $request = $this->getRequest();
        $form = new RecoverPasswordForm();
//      $form->get("submit")->setValue("Send mail");
        $this->view->form = $form;
        if ($request->isPost()) {
            $user = new User();
            $form->getInputFilter()->getValues();
            $form->setInputFilter($form->getInputFilter());
            $data = $request->getPost();
            $form->setData($data);
            $username = $data['username'];
            $userData = $this->getServiceLocator()->get("UserTable")->fetchList("`username` LIKE '$username'");
            if (!count($userData) > 0) {
                $this->cache->error = "A user with this email does not exist, plese try again.";
            }
                if ($form->isValid()) {
                    foreach ($userData as $user) {
                        $user->sendMail(6);
                        $this->cache->success = "A message has been send to this email, containing your password.";
                    }
                }
        }
        return $this->view;
    }

您能否尝试在表单上实现
InputProviderInterface
?中给出了基本示例。在元素上设置了它,但您也可以在表单上执行此操作。此接口定义了
getInputSpecification
,其中您必须返回带有筛选器和验证程序规范的数组。

没有错误,只是没有错误t在调用$form->getInputFilter()->getValues()之前是否调用$form->isValid()验证它;?@MarcinTwardowski用控制器代码更新了我的帖子没有必要获取/设置inputFilter,尝试删除它,还有一个提示,在获取表单验证之前不要查询DB,您将面临SQL注入。首先询问您的表单是否有效。
      public function recoverPasswordAction() {
        $this->cache = new Container("cache");
        $request = $this->getRequest();
        $form = new RecoverPasswordForm();
//      $form->get("submit")->setValue("Send mail");
        $this->view->form = $form;
        if ($request->isPost()) {
            $user = new User();
            $form->getInputFilter()->getValues();
            $form->setInputFilter($form->getInputFilter());
            $data = $request->getPost();
            $form->setData($data);
            $username = $data['username'];
            $userData = $this->getServiceLocator()->get("UserTable")->fetchList("`username` LIKE '$username'");
            if (!count($userData) > 0) {
                $this->cache->error = "A user with this email does not exist, plese try again.";
            }
                if ($form->isValid()) {
                    foreach ($userData as $user) {
                        $user->sendMail(6);
                        $this->cache->success = "A message has been send to this email, containing your password.";
                    }
                }
        }
        return $this->view;
    }