我有以下代码用于验证登录表单,
public function index(){
//Check weather session exist or not!
if(($this->session->userdata('user_email') != ""))
{
if(($this->session->userdata('is_admin') == "Yes"))
{
redirect('admin/home');
}
elseif(($this->session->userdata('is_manager') == "Yes"))
{
redirect('manager/home');
}
else
{
redirect('user/home');
}
}
else
{
$this->load->view('view_login');
}
//If not exists then get login post request
if ($this->input->post('login'))
{
$this->form_validation->set_rules('username', 'User Name', 'trim|required|xss_clean|valid_email');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');
if ($this->form_validation->run() == FALSE) {
$this->load->view('view_login');
}
else {
$username = $this->input->post('username');
$password = md5($this->input->post('password'));
$user_count = $this->login_model->user_count($username,$password);
if($user_count == 1)
{
// If there is a user, then check enable status
$row = $this->login_model->user_data($username,$password);
if($row->user_status == "Enable")
{
$_userdata = array(
'user_id' => $row->user_id,
'user_email' => $row->user_email,
'user_firstname' => $row->user_firstname,
'user_lastname' => $row->user_lastname,
'user_image' =>$row->user_image,
'is_admin' => $row->is_admin,
'is_manager' => $row->is_manager,
'user_tz' =>$row->tz_name,
'logged_in' => true
);
$this->session->set_userdata($_userdata);
//Now check user type weather admin or user then move to respected page
if($row->is_admin == "Yes")
{
redirect('admin/home');
}
elseif($row->is_manager == "Yes")
{
redirect('manager/home');
}
else
{
redirect('user/home');
}
}
else
{
$error = array(
'error_message' => 'User Name is Disabled'
);
$this->load->view('view_login', $error); // Manager Disables
}
}
else
{
$data1 = array(
'error_message' => 'Wrong Username or Password'
);
$this->load->view('view_login', $data1); //Wrong user pw
}
}
}
}
我在这里做的是当索引加载时,检查天气是否存在任何会话,如果是,则只需重定向到用户的主页, 如果不存在会话,则加载登录视图页面
然后用户输入用户名和PW,然后表单验证完成, 如果失败,再次加载视图页面,此页面将显示CI表单验证错误,
问题是,当验证失败时,我在视图上获得两个登录表单,意味着一个用于登录的登录表单和另一个带有CI验证错误的登录表单,
如果CI发送验证错误,我怎么才能获得1个登录表单? 我的猜测是我在第2页加载view_login,但不知道如何防止这种情况!
谢谢,
答案 0 :(得分:0)
您可以从else部分删除加载view_login语句,并将其另外放入$ this-> input-> post(' login'),如下所示:
if ($this->input->post('login'))
{
........
........
} else {
$this->load->view('view_login');
}
答案 1 :(得分:0)
Try this and let me know.
<?php
function index(){
//Check weather session exist or not!
if(($this->session->userdata('user_email') != ""))
{
if(($this->session->userdata('is_admin') == "Yes"))
{
redirect('admin/home');
}
elseif(($this->session->userdata('is_manager') == "Yes"))
{
redirect('manager/home');
}
else
{
redirect('user/home');
}
}
//If not exists then get login post request
else if ($this->input->post('login'))
{
$this->form_validation->set_rules('username', 'User Name', 'trim|required|xss_clean|valid_email');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');
if ($this->form_validation->run() == FALSE) {
$this->load->view('view_login');
}
else {
$username = $this->input->post('username');
$password = md5($this->input->post('password'));
$user_count = $this->login_model->user_count($username,$password);
if($user_count == 1)
{
// If there is a user, then check enable status
$row = $this->login_model->user_data($username,$password);
if($row->user_status == "Enable")
{
$_userdata = array(
'user_id' => $row->user_id,
'user_email' => $row->user_email,
'user_firstname' => $row->user_firstname,
'user_lastname' => $row->user_lastname,
'user_image' =>$row->user_image,
'is_admin' => $row->is_admin,
'is_manager' => $row->is_manager,
'user_tz' =>$row->tz_name,
'logged_in' => true
);
$this->session->set_userdata($_userdata);
//Now check user type weather admin or user then move to respected page
if($row->is_admin == "Yes")
{
redirect('admin/home');
}
elseif($row->is_manager == "Yes")
{
redirect('manager/home');
}
else
{
redirect('user/home');
}
}
else
{
$error = array(
'error_message' => 'User Name is Disabled'
);
$this->load->view('view_login', $error); // Manager Disables
}
}
else
{
$data1 = array(
'error_message' => 'Wrong Username or Password'
);
$this->load->view('view_login', $data1); //Wrong user pw
}
}
} else
{
$this->load->view('view_login');
}
}