【问题标题】:How do get form_validation to work properly in Code Igniter如何让 form_validation 在 Codeigniter 中正常工作
【发布时间】:2012-09-30 02:05:39
【问题描述】:

我非常接近放弃 Code Igniter 中的原生表单验证错误函数,因为我很难让它们正常工作。我的逻辑看起来像一个箭头,但是错误构成的行为确实让我陷入了基于我的逻辑的循环。

所以这里列出了正在发生的事情。

*当我在未填写任何字段的情况下提交表单时 = 无效的电子邮件和密码错误应该构成

*当我输入正确的电子邮件并将密码字段留空时 = 正确的无效密码错误出现

*当我输入正确的电子邮件和错误的密码 = 页面加载为白色

*当我只输入密码字段时=出现无效电子邮件

*当我输入乱码电子邮件并将密码留空=出现无效电子邮件

有许多假罩组合正在发生。

如果正在输入的电子邮件在数据库中不存在,我还希望将电子邮件设置为唯一的识别位置。

我已经被困在这个问题上太久了,真的需要一些帮助。我是代码点火器的新手,我真的很困惑为什么会发生这种情况。非常感谢任何帮助。

这是我的代码:

表格:

<?php
echo form_open('auth/validate_credentials_login');
echo "<span class='errors_login'>";
echo form_error('email_login');
echo "</span>";
echo form_label('', 'Email', 'email_login');
$data = array( 'name' => 'email_login', 'class' => 'input', 'placeholder' => 'Email');
echo form_input($data, set_value('email_login'));
echo "<span class='errors_login'>";
echo form_error('password_login');
echo "</span>";
echo form_label('', 'Password;', 'password_login');
$data = array( 'name' => 'password_login', 'class' => 'input', 'placeholder' => 'Password');
echo form_password($data, set_value('sha1(password_login)'));
echo form_submit('submit_login', 'Login');
echo form_close();
?>

控制器:

function validate_credentials_login()
        {
            $this->load->library('session');
            $this->load->helper(array('form','url'));
            $this->load->model('user_model', 'um');
            $this->load->library('encrypt');
            $this->load->library('form_validation');
            $this->form_validation->set_rules('email_login', 'Email', 'required');
            $this->form_validation->set_rules('password_login', 'Password', 'required');
            $login = $this->input->post('submit_login');

            if($login) {
                if($this->form_validation->run() == FALSE)
                {
                    $data['main_content'] = 'home/home_page';
                    $this->load->view('includes/templates/home_page_template', $data);
                }
                else 
                {
                    $user = $this->um->validate_home_login(array('email' => $this->input->post('email_login')));

                        if($user->password == $this->encrypt->sha1( $user->salt .           $this->encrypt->sha1($this->input->post('password_login')))) {
                            $this->session->set_userdata(array(
                                'email' => $this->input->post('email_login')
                                    ));
                                redirect('account/edit');
                                exit;
                            }
                        }
                    }
                }

提前致谢!

【问题讨论】:

  • 尝试使用隐藏输入而不是检查提交按钮。此外,加载白色的页面是因为您在通过所需规则后没有考虑 $user->password 不等于加密的。通常,在表单验证后加载视图作为后备。

标签: codeigniter error-handling validation


【解决方案1】:

当我输入正确的电子邮件和错误的密码时 = 页面加载为白色

那是因为你这里没有else 条件:

if($user->password == $this->encrypt->sha1($user->salt.$this->encrypt->sha1($this->input->post('password_login')))) {
        $this->session->set_userdata(array(
            'email' => $this->input->post('email_login')
        ));
        redirect('account/edit');
        exit;
    }
}
// do nothing?

您列表中的所有其他内容听起来都符合预期,但您可能需要确保 $this-&gt;um-&gt;validate_home_login() 正在做它应该做的事情。

附带说明,在调用redirect() 后无需exit,它会为您完成。

另外,set_value('sha1(password_login)') 对我来说看起来很可疑,我认为它不像你想的那样。它将密码值设置为文字字符串sha1(password_login)。我不建议您预先填充密码字段 - 只需将其留空即可。

CI 的表单验证绝对没有被破坏,它实际上工作得很好,所以不要沮丧。查看documentation 并尝试一些更简单的方法可能是个好主意,直​​到您可以正常工作为止。

如果正在输入的电子邮件在数据库中不存在,我还希望使电子邮件在识别位置上是唯一的。

查看is_unique 规则:

http://ellislab.com/codeigniter/user_guide/libraries/form_validation.html#rulereference

$this->form_validation->set_rules(
    'email_login',
    'Email',
    'required|is_unique[your_table.your_email_field]'
);

【讨论】:

    猜你喜欢
    • 2016-04-30
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2012-07-23
    • 2020-10-06
    • 1970-01-01
    • 2015-05-08
    相关资源
    最近更新 更多