想知道是否有人可以指导我做错了(或需要做的)并认为问题出在我的路线文件中。当用户显示登录表单时,例如,在提交URL显示后,他们的用户名错误:http://localhost:8888/codeigniter/login/login_validation
。如果成功并登录到管理区域(从数据库中提取新闻文章),则仍会显示此网址。我想知道是否有办法让它http://localhost:8888/codeigniter/news.
我查看了我的路线文件夹,我试图使用'通配符'并且不成功。这是我的代码供参考,所需的任何其他信息或文件让我知道!感谢。
控制器:
class Login extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->load->view('login');
}
//Validate login area
public function login_validation() {
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|callback_username_check');
$this->form_validation->set_rules('password', 'Password', 'required|xss_clean|callback_password_check');
if($this->form_validation->run() == FALSE) {
//Field validation failed. User redirected to login page
$this->index();
}else{
$this->load->model('user_model');
$query = $this->user_model->login_details();
// if the user's credentials validated...
if($query) {
$data = array(
'username' => $this->input->post('username'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('news');
}else{
$data['error'] ="Invalid Username or Password";
$this->load->view('login',$data);
}
}
}
function logout() {
$this->session->sess_destroy();
$this->index();
}
}
来自user_model.php的login_details函数
function login_details() {
$this->db->where('username', $this->input->post('username'));
$this->db->where('password', md5($this->input->post('password')));
$query = $this->db->get('login');
if($query->num_rows == 1){
return true;
}
}
答案 0 :(得分:1)
如果您正在登录任何类型的系统,则需要使用CodeIgniter的Session类来存储会话。如果存在controllers/news.php
,您可以设置会话并立即使用redirect('news');
执行重定向。不需要$this->load->view()
因为这个逻辑无论如何都会在news.php
的索引中,而且你会复制代码。
我不确定$this->user_model->login_details()
返回了什么,但我假设false
或null
,因为您说CodeIgniter正在将您发送回login
视图。进入login_details()
函数并确保一切正常(您可能也想发布它)。另外,如果您进行了更改,请为我们发布routes.php
文件。
注意:Space是一个有效的密码字符,不要trim
它或密码中带有前导或尾随空格的人将无法进入;)