登录系统不起作用,CodeIgniter

时间:2017-11-20 02:31:01

标签: php codeigniter session codeigniter-3

首先,这篇文章将会很长,谢谢你的帮助。

您好我一直在尝试在我的CodeIgniter应用程序上创建登录和注册系统。到目前为止它工作得很好,我可以创建和获取它们(如果没有登录),无论我希望它们显示在哪里,现在遇到的问题是限制部分。

例如,我有一个admin_controller,我需要限制访问。我没有在任何需要相同配置的控制器中添加代码,而是在核心文件夹中创建了一个“MY_Controller”,这是我的代码:

<?php
class MY_Controller extends CI_Controller{
    function __construct(){
        parent::__construct();
    }
}

class Admin_Controller extends MY_Controller{
    function __construct(){
        parent::__construct();

        // Check Login
        /*if(!$this->session->userdata('logged_in')){
            redirect('admin/login');
        }*/
    }
}

class Public_Controller extends MY_Controller{
    public function __construct(){
        parent::__construct();

        $this->load->library('menu');

        $pages_public /*$this->pages*/ = $this->menu->get_pages();

        // Brand/Logo
        $this->brand = 'My Website';

        // Banner
        $this->banner_heading = 'Welcome To Our Website';
        $this->banner_text = 'This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.';
        $this->banner_link = 'pages/show/our-team';
    }
}

这就是我在admin_controller上的内容,到目前为止还没有错:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Pages extends Admin_Controller {

    public function index(){
        $data['pages'] = $this->Page_model->get_list();

        // Load template
        $this->template->load('admin', 'default', 'pages/index', $data);
    }

    public function add(){
        // Field Rules
        $this->form_validation->set_rules('title', 'Title', 'trim|required|min_length[3]');
        $this->form_validation->set_rules('subject_id', 'Subject', 'trim|required');
        $this->form_validation->set_rules('body', 'Body', 'trim|required');
        $this->form_validation->set_rules('is_published', 'Publish', 'required');
        $this->form_validation->set_rules('is_featured', 'Feature', 'required');
        $this->form_validation->set_rules('order', 'Order', 'integer');

        if($this->form_validation->run() == FALSE){
            $subject_options = array();
            $subject_options[0] = 'Select Page Category';

            $subject_list = $this->Pages_categories_model->get_list();

            foreach($subject_list as $subject){
                $subject_options[$subject->id] = $subject->name;
            }

            $data['subject_options'] = $subject_options;

            // Load template
            $this->template->load('admin', 'default', 'pages/add', $data);
        } else {
            $slug = str_replace(' ', '-', $this->input->post('title'));
            $slug = strtolower($slug);

            // Page Data
            $data = array(
                'title'         => $this->input->post('title'),
                'slug'          => $slug,
                'subject_id'    => $this->input->post('subject_id'),
                'body'          => $this->input->post('body'),
                'is_published'  => $this->input->post('is_published'),
                'is_featured'   => $this->input->post('is_featured'),
                'in_menu'       => $this->input->post('in_menu'),
                'user_id'       => $this->session->userdata('user_id'),
                'order'         => $this->input->post('order')
            ); 

            // Insert Page
            $this->Page_model->add($data);

            // Activity Array
            $data = array(
                'resource_id'   => $this->db->insert_id(),
                'type'          => 'page',
                'action'        => 'added',
                'user_id'       => $this->session->userdata('user_id'),
                'message'       => 'A new page was added ('.$data["title"].')'
            );

            // Insert Activity
            $this->Activity_model->add($data);

            // Set Message
            $this->session->set_flashdata('success', 'Page has been added');

            // Redirect
            redirect('admin/pages');
        }

    }

    public function edit($id){
        // Field Rules
        $this->form_validation->set_rules('title', 'Title', 'trim|required|min_length[3]');
        $this->form_validation->set_rules('subject_id', 'Subject', 'trim|required');
        $this->form_validation->set_rules('body', 'Body', 'trim|required');
        $this->form_validation->set_rules('is_published', 'Publish', 'required');
        $this->form_validation->set_rules('is_featured', 'Feature', 'required');
        $this->form_validation->set_rules('order', 'Order', 'integer');

        if($this->form_validation->run() == FALSE){
            $data['item'] = $this->Page_model->get($id);

            $subject_options = array();
            $subject_options[0] = 'Select Page Category';

            $subject_list = $this->Pages_categories_model->get_list();

            foreach($this->Pages_categories_model->get_list() as $subject){
                $subject_options[$subject->id] = $subject->name;
            }

            $data['subject_options'] = $subject_options;

            // Load template
            $this->template->load('admin', 'default', 'pages/edit', $data);
        } else {
            $slug = str_replace(' ', '-', $this->input->post('title'));
            $slug = strtolower($slug);

            // Page Data
            $data = array(
                'title'         => $this->input->post('title'),
                'slug'          => $slug,
                'subject_id'    => $this->input->post('subject_id'),
                'body'          => $this->input->post('body'),
                'is_published'  => $this->input->post('is_published'),
                'is_featured'   => $this->input->post('is_featured'),
                'in_menu'       => $this->input->post('in_menu'),
                'user_id'       => $this->session->userdata('user_id'),
                'order'         => $this->input->post('order')
            ); 

            // Update Page
            $this->Page_model->update($id, $data);

            // Activity Array
            $data = array(
                'resource_id'   => $this->db->insert_id(),
                'type'          => 'page',
                'action'        => 'updated',
                'user_id'       => $this->session->userdata('user_id'),
                'message'       => 'A page was updated ('.$data["title"].')'
            );

            // Insert Activity
            $this->Activity_model->add($data);

            // Set Message
            $this->session->set_flashdata('success', 'Page has been updated');

            // Redirect
            redirect('admin/pages');

        }
    }

    public function delete($id){
        $title = $this->Page_model->get($id)->title;

        // Delete Page
        $this->Page_model->delete($id);

        // Activity Array
            $data = array(
                'resource_id'   => $this->db->insert_id(),
                'type'          => 'page',
                'action'        => 'deleted',
                'user_id'       => $this->session->userdata('user_id'),
                'message'       => 'A page was deleted'
            );

            // Insert Activity
            $this->Activity_model->add($data);

            // Set Message
            $this->session->set_flashdata('success', 'Page has been deleted');

            // Redirect
            redirect('admin/pages');
    }
}

问题来自控制器users_controller。我已经创建了一个包含一些数据的帐户,并且该数据至少应该允许我访问admin_controller,而不是将其重定向到admin / login表单。

我想说,由于某种原因,当我尝试添加页面时,我收到一条错误消息,指出user_id不能为空,但是因为我“应该”登录,所以不应出现该错误。谁知道如何解决它?

错误消息

  

错误号:1048列'user_id'不能为空INSERT INTO'pages'   ('title','slug','subject_id','body','is_published','is_featured',   'in_menu','user_id','order')VALUES('Page One','page-one','1','   thrhjtyjrjrj','1','0','1',NULL,'1')

     

文件名:   C:/xampp/htdocs/codeigniter/application/models/page_model.php Line   数量:20

User_Controller:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Users extends CI_Controller {
    function __construct(){
        parent::__construct();
    }

    public function index(){
        // Check Login
        if(!$this->session->userdata('logged_in')){
            redirect('admin/login');
        }

        $data['users'] = $this->User_model->get_list();
        // Load template
        $this->template->load('admin', 'default', 'users/index', $data);
    }

    public function add(){
        // Check Login
        if(!$this->session->userdata('logged_in')){
            redirect('admin/login');
        }

        $this->form_validation->set_rules('first_name','First Name','trim|required|min_length[2]');
        $this->form_validation->set_rules('last_name','Last Name','trim|required|min_length[2]');
        $this->form_validation->set_rules('username','Username','trim|required|min_length[4]');
        $this->form_validation->set_rules('email','Email','trim|required|min_length[7]|valid_email');
        $this->form_validation->set_rules('password','Password','trim|required|min_length[4]|matches[password2]');
        $this->form_validation->set_rules('password2','Confirm Password','trim|required|min_length[6]|matches[password2]');

        if ($this->form_validation->run() == FALSE){
            // Load View Into Template
            $this->template->load('admin','default','users/add');
        } else {
            // Create Page Data Array
            $data = array(
                'first_name'    => $this->input->post('first_name'),
                'last_name'     => $this->input->post('last_name'),
                'email'         => $this->input->post('email'),
                'username'      => $this->input->post('username'),
                'password'      => md5($this->input->post('password'))
            );   

            // Add User
            $this->User_model->add($data);

            //Activity Array
            $data = array(
                'resource_id'   =>  $this->db->insert_id(),
                'type'          => 'user',
                'action'        => 'added',
                'user_id'       => $this->session->userdata('user_id'),
                'message'       => 'A new user was added ('.$data["username"].')'
            ); 

            // Add Activity  
            $this->Activity_model->add($data);

            // Create Message
            $this->session->set_flashdata('success', 'User has been added');

            // Redirect to pages
            redirect('admin/users');
        }
    }

    public function edit($id){
        // Check Login
        if(!$this->session->userdata('logged_in')){
            redirect('admin/login');
        }

        $this->form_validation->set_rules('first_name','First Name','trim|required|min_length[2]');
        $this->form_validation->set_rules('last_name','Last Name','trim|required|min_length[2]');
        $this->form_validation->set_rules('username','Username','trim|required|min_length[4]');
        $this->form_validation->set_rules('email','Email','trim|required|min_length[7]|valid_email');

        if ($this->form_validation->run() == FALSE){
            // Get Current Subject
            $data['item'] = $this->User_model->get($id);
            //Load View Into Template
            $this->template->load('admin','default','users/edit', $data);
        } else {
            // Create User Data Array
            $data = array(
                'first_name'    => $this->input->post('first_name'),
                'last_name'     => $this->input->post('last_name'),
                'email'         => $this->input->post('email'),
                'username'      => $this->input->post('username')
            );   

            // Update User
            $this->User_model->update($id, $data);

            // Activity Array
            $data = array(
                'resource_id'   =>  $this->db->insert_id(),
                'type'          => 'user',
                'action'        => 'updated',
                'user_id'       => $this->session->userdata('user_id'),
                'message'       => 'A user was updated ('.$data["username"].')'
            ); 

            // Add Activity  
            $this->Activity_model->add($data);

            //Create Message
            $this->session->set_flashdata('success', 'User has been updated');

            //Redirect to Users
            redirect('admin/users');
        }
    }

    public function delete($id){
        // Check Login
        if(!$this->session->userdata('logged_in')){
            redirect('admin/login');
        }

        // Get Username
        $username = $this->User_model->get($id)->username;

        // Delete User
        $this->User_model->delete($id);

        // Activity Array
        $data = array(
            'resource_id'   =>  $this->db->insert_id(),
            'type'          => 'user',
            'action'        => 'deleted',
            'user_id'       => $this->session->userdata('user_id'),
            'message'       => 'A user was deleted'
        ); 

        // Add Activity  
        $this->Activity_model->add($data);

        // Create Message
        $this->session->set_flashdata('success', 'User has been deleted');

        // Redirect to Subjects
        redirect('admin/users');
    }

    public function login(){
        $this->form_validation->set_rules('username','Username','trim|required|min_length[4]');
        $this->form_validation->set_rules('password','Password','trim|required|min_length[4]');


        if ($this->form_validation->run() == FALSE){
            //Load View Into Template
            $this->template->load('admin','login','users/login');
        } else {
           // Get Post Data
            $username = $this->input->post('username');
            $password = $this->input->post('password');
            $enc_password = md5($password);

            $user_id = $this->User_model->login($username, $enc_password);

            if($user_id){
                $user_data = array(
                    'user_id' => $user_id,
                    'username'  => $username,
                    'logged_in' => true
                );

                // Set Session Data
                $this->session->set_userdata($user_data);

                // Create Message
                $this->session->set_flashdata('success', 'You are logged in');

                // Redirect to pages
                redirect('admin');
            } else {
                // Create Error
                $this->session->set_flashdata('error', 'Invalid Login');

                // Redirect to pages
                redirect('admin/users/login');
            }
        }
    }

        public function register(){

        $this->form_validation->set_rules('first_name','First Name','trim|required|min_length[2]');
        $this->form_validation->set_rules('last_name','Last Name','trim|required|min_length[2]');
        $this->form_validation->set_rules('username','Username','trim|required|min_length[4]');
        $this->form_validation->set_rules('email','Email','trim|required|min_length[7]|valid_email');
        $this->form_validation->set_rules('password','Password','trim|required|min_length[4]|matches[password2]');
        $this->form_validation->set_rules('password2','Confirm Password','trim|required|min_length[6]|matches[password2]');

        if ($this->form_validation->run() == FALSE){
            // Load View Into Template
            $this->template->load('admin','login','users/register');
        } else {
            // Create Page Data Array
            $data = array(
                'first_name'    => $this->input->post('first_name'),
                'last_name'     => $this->input->post('last_name'),
                'email'         => $this->input->post('email'),
                'username'      => $this->input->post('username'),
                'password'      => md5($this->input->post('password'))
            );   

            // Add User
            $this->User_model->add($data);

            //Activity Array
            $data = array(
                'resource_id'   =>  $this->db->insert_id(),
                'type'          => 'user',
                'action'        => 'registered',
                'user_id'       => $this->session->userdata('username'),
                'message'       => 'A new user was registered ('.$data["username"].')'
            ); 

            // Add Activity  
            $this->Activity_model->add($data);

            // Create Message
            $this->session->set_flashdata('success', 'User has been registered');

            // Redirect to pages
            redirect('admin/users/login');
        }
    }

    public function logout(){
        $this->session->unset_userdata('logged_in');
        $this->session->unset_userdata('user_id');
        $this->session->unset_userdata('username');
        $this->session->sess_destroy();

        // Message
        $this->session->set_flashdata('success', 'You are logged out');
        redirect(base_url());
    }
}

这是我的user_model(如果你想检查它):

<?php
class User_model extends CI_MODEL{
    function __construct(){
        parent::__construct();
        $this->table = 'users';
    }

    public function get_list(){
        $query = $this->db->get($this->table);
        return $query->result();
    }

    public function get($id){
        $this->db->where('id', $id);
        $query = $this->db->get($this->table);
        return $query->row();
    }

    public function add($data){
        $this->db->insert($this->table, $data);
    }

    public function update($id, $data){
        $this->db->where('id', $id);
        $this->db->update($this->table, $data);
    }

    public function delete($id){
        $this->db->where('id', $id);
        $this->db->delete($this->table);
    }

    public function login($username, $password){
        $this->db->select('*');
        $this->db->from($this->table);
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $this->db->limit(1);

        $query = $this->db->get();

        if($query->num_rows() == 1){
            return $query->row()->id;
        } else {
            return false;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

1 /您应该编写一个私有方法来检查已记录的用户,如

private function checkLogin()
{
     if(!$this->session->userdata('logged_in')){
        redirect('admin/login');
    }
}

2 /您必须确保已加载库会话。

相关问题