将表单提交给自己并在CodeIgniter中回显验证错误

时间:2014-07-06 22:15:58

标签: php forms codeigniter validation

我项目中的表格很少,他们被提交到公共职能部门,例如site.com/email => site.com/validate_email,但后来我意识到这不是我想要的。 现在我需要让他们提交给自己,检查并显示验证错误。 这样做的适当方法是什么?如果帖子不是空的,请检查$_POST的空白然后调用我的新_validate_email(//将返回true或false)? 还是别的东西不是那么noobish?:)

例如:

public function login()
{
        $this->load->view('login');
}


public function login_validation()
{
        $this->load->library('form_validation');

        $this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim|xss_clean|callback_validate_credentials');
        $this->form_validation->set_rules('password','Password','required|md5');

        if($this->form_validation->run())
        {
            //some stuff here
        }
        else
        {
            $this->load->view('login'); //or redirect()?
        } 

视图:

<?php $this->load->view('header'); ?>


<div class="form-container">
    <?=$this->form_validation->validation_errors();?>
    <?php
    $form_atr = array(
        'id' => 'form-set'
    );
    echo form_open('main/login_validation', $form_atr);//this should be 'main/login'
    ?>
    <div class="header">
        /*
here goes other parts of form
*/
</div><!--END  form-container -->`
<?php $this->load->view('footer'); ?>

所以,基本上我需要将login()login_validation()结合起来,但是当用户的输入不正确时,我会获得同一视图的重新加载页面并使用相同的URL并显示验证错误

我试图将验证代码放入显示表单的同一个函数中,但我无法弄清楚如何重定向或重新加载视图以显示val.errors(如果有的话)。

2 个答案:

答案 0 :(得分:1)

所以,我认为这种方式是正确的(确实应该如此):

我通过在其前添加“_”来使我的login_validation()变为私有,就像这样_login_validation() 我添加了一个包含if()表单变量的$_POST语句,并且我使用php isset()函数对它们进行了检查,这样代码就可以确定用户何时提交表单。毕竟,如果设置了输入,我只需调用_login_validation(),否则再次加载我的登录视图。

public function login()
{

    if(isset($_POST['password']) && isset($_POST['email']))
    {
        $this->_login_validation();
    }
    else
    {
        $this->load->view('login');
    }
}

并且不要忘记处理您的表单,以便提交到相同的网址:

echo form_open('', $form_atr);

希望有一天能帮到某人。

答案 1 :(得分:0)

首先,validation_errors()是一种闪存数据,因此每当您重定向错误页面时,都会显示验证错误,如果您第二次重新加载它将无法显示。

从您的问题我无法理解,您是否想要显示错误。 如果你想显示错误: 然后只需将页面重定向到登录,并在登录视图中添加alert div

如果您不想显示错误: 然后只需删除alert div

*我在登录视图中看不到任何警告div,如果仍然显示验证错误,则标题视图中可能会显示alert div