1

想知道是否有人可以指导我做错了什么(或需要做什么)并认为问题出在我的路线文件中。当用户显示登录表单时,例如他们在提交 url 后输入错误的用户名,显示如下:http://localhost:8888/codeigniter/login/login_validation。当成功并登录到管理区域(从数据库中提取新闻文章)时,仍会显示此 URL。我想知道是否有办法让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;
        }
    }       
4

1 回答 1

1

如果您登录到任何类型的系统,您将需要使用 CodeIgniter 的Session类来存储会话。如果controllers/news.php存在,您可以设置会话并立即使用redirect('news');. 不需要,$this->load->view()因为无论如何这个逻辑都会在news.php's index 中,而且你会复制代码。

我不确定$this->user_model->login_details()返回的是什么,但我假设false或者null因为您说 CodeIgniter 正在将您送回login视图。进入login_details()功能并确保一切正常(您可能也想发布它)。此外,routes.php如果您进行了更改,请为我们发布您的文件以防万一。

附带说明:空格是有效的密码字符,不是trim这样,否则密码中带有前导或尾随空格的人将无法进入;)

于 2012-09-03T17:06:15.370 回答