0

我非常接近放弃 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;
                            }
                        }
                    }
                }

提前致谢!

4

1 回答 1

4

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

那是因为你在这里没有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->um->validate_home_login()正在做它应该做的事情。

附带说明一下,exit在调用之后无需redirect()这样做,它会为您执行此操作。

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

CI 的表单验证绝对没有被破坏,它实际上工作得很好,所以不要沮丧。查看文档并尝试一些更简单的东西可能是一个好主意,直​​到你可以让一切正常工作。

如果正在输入的电子邮件在数据库中不存在,我还想让这些电子邮件在它识别的位置上是唯一的。

查看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]'
);
于 2012-10-09T17:29:38.887 回答