我非常接近放弃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;
}
}
}
}
提前感谢!
答案 0 :(得分: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的表单验证肯定没有被破坏,它实际上运行得很好,所以不要感到沮丧。最好回顾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]'
);