手动点击相同的控制器 url 方法会在 Codeigniter 中出现错误

Hitting same controller url method manually gives error in Codeigniter

我是 Codeigniter 的新手,我遇到了一个问题,我搜索了所有地方但没有找到解决方案, 我的问题是,当我通过 link 调用特定的控制器方法时,它非常适用于例如。

http://localhost/MyProject/indexController/user_login_process

但是当我在第一次正确渲染后手动点击该方法时,它渲染了视图,但出现了以下错误。 请帮助我解决我的问题:

Controller:

   public function user_login_process() {

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');

if ($this->form_validation->run() == FALSE) {


if(isset($this->session->userdata['logged_in'])){
$this->load->view('teaching');


}else{

$this->load->view('index');

}
} else {
$username=$this->input->post('username');
$data = array('username' => $this->input->post('username'),'password' => $this->input->post('password'));
$result = $this->login_database->login($data);
if ($result == TRUE) {


$result = $this->login_database->read_user_information($username);
if ($result != false) {

$session_data = array('id'=>$result[0]->id,'username' => $result[0]->email,'password' => $result[0]->password);

// Add user data in session
$this->session->set_userdata('logged_in', $session_data);
$this->session->set_userdata('user_info', $session_data);

$user_info=$this->session->userdata('user_info');
$u_id=$user_info['id'];

$data['query']=$this->teaching_model->get_all_courses($u_id);
$this->load->view('teaching', $data);

}
} 
else 
{ 
$data = array('error_message' => 'Invalid Username or Password');
$this->load->view('index', $data);
}
}
}

Model:

<?php

Class Teaching_model extends CI_Model {

function get_all_courses($u_id)
{
   $condition = "u_id =" . "'" . $u_id . "'";
   $this->load->database();
   $this->db->select("*");
   $this->db->from("course");
   $this->db->where($condition);
   $query=$this->db->get();
   return $query->result();
}

}

teaching View:

foreach ($query as $row) 
        { ?>
$row->name;
<? }  ?>

如果是会话问题,请尝试使用数据库管理会话:

config.php

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_sessions';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

对于MySQL:

在您的数据库中创建一个名为 'ci_sessions' 的 table,所有会话都将使用此 table 进行管理,这将在您托管网站/应用程序时提供帮助,可以避免会话变量和权限的一些可能错误:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(40) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        KEY `ci_sessions_timestamp` (`timestamp`)
);

**用于验证用户的密码**

public function validate_admin($username,$password)
    {
        // grab user input
        if(isset($_POST['username']) AND $_POST['username'] !='')
        {
        $username = $this->security->xss_clean($this->input->post('username'));
        $password = $this->security->xss_clean($this->input->post('password'));
        }



        $this->db->where('username', $username);

        $this->db->where('password', $password);

        $this->db->having("rec_status != 'C' ");
        // Run the query
        $query = $this->db->get('employee');
        // Let's check if there are any results
        if($query->num_rows() == 1)
        {
            // If there is a user, then create session data
            $row = $query->row();
            $data = array(
            'id_admin' => $row->id,
            'first_name' => $row->first_name,
            'last_name' => $row->last_name,
            'email_admin' => $row->email,
            'phone_admin' => $row->phone,
            'acc_status_admin' => $row->rec_status,
            'acc_type_admin' => $row->emp_role,
            'validated_admin' => true
            );
            $this->session->set_userdata($data);
            return true;
        }


        // If the previous process did not validate
        // then return false.
        return false;
    }

试试这个。所有代码都已更改。仔细检查。

将您的控制器名称更改为 Home.php 并在 Home 内。 Bcz 你的 URL contain index 确实很糟糕

在控制器中

public function user_login_process() {

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');

    if ($this->form_validation->run() == FALSE) 
    {
        # I dont know purpose od this. For now i juts redirct to login

        redirect('login');
    /*      if(isset($this->session->userdata['logged_in']))
            {
                $this->load->view('teaching');
            }
            else
            {

                $this->load->view('index');

            }*/
    } 
    else 
    {
        $this->load->database();

        $username = $this->input->post('username');
        $password = $this->input->post('password');

        $result = $this->login_database->login($username,$password);

        if ($result == 0) {
            echo "Invalid login";
        }
        elseif ($result == 1) {
            echo "Multiple account matched. Contact admin";
        }
        else{
            $session_data = array(
                'id' =>$result[0]['id'],
                'username' => $result[0]['email'],
                'password' => $result[0]['password'],
                'logged_in' => TRUE
            );
            # only set one sesstion
            $this->session->set_userdata($session_data);

            $id = $result[0]['id']; # logged User ID
            $data['query']=$this->teaching_model->get_all_courses($id);
        }



        if ($result) 
        {
            $result = $this->login_database->read_user_information($username);
            if ($result != false) 
            {
                // Add user data in session
                $this->session->set_userdata('logged_in', $session_data);
                $this->session->set_userdata('user_info', $session_data);

                $user_info=$this->session->userdata('user_info');
                $u_id=$user_info['id'];

                $result2 =  $this->teaching_model->get_all_courses($u_id);

                if($result2 == 0){
                    echo "No Courses Found";
                }
                else{
                    $data['query'] = $result2;
                    $this->load->view('teaching', $data);
                }       
            }
        } 
        else 
        { 
            $data = array('error_message' => 'Invalid Username or Password');
            $this->load->view('index', $data);
        }
    }
}

模型中*(login_database)*

public function login($username,$password)
{
    $query = $this->db->query("SELECT * FROM table_name WHERE username = '$username' AND password= '$password' ");
    $result = $query->result_array();
    $count = count($result);

    if (empty($count)) {
        return 0;
    }
    elseif ($count) >1) {
        return 1;
    }
    else{
        return $result;
    }
}

模型中*(Teaching_model)*

Class Teaching_model extends CI_Model {

    function get_all_courses($id)
    {
        $query = $this->db->query("SELECT * FROM course WHERE u_id = $id");
        $result = $query->result_array();
        $count = count($result);

        if (empty($count)) {
            return 0;
        }
        else{
            return $result;
        }
    }
}