手动命中相同的控制器url方法会在Codeigniter中出错

时间:2016-01-07 08:05:43

标签: php codeigniter codeigniter-2

我是Codeigniter的新手,我陷入了一个问题,我已经搜索过每一个地方,但我找不到它的解决方案, 我的问题是,当我通过链接点击特定的控制器方法时,它可以完美地用于例如。

http://localhost/MyProject/indexController/user_login_process

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

  

控制器:

   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);
}
}
}
  

型号:

<?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();
}

}
  

教学观点:

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

enter image description here

2 个答案:

答案 0 :(得分:0)

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

<强>的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'的表,所有会话都将使用此表进行管理,它将在您托管网站/应用程序时帮助您,可以避免会话变量和权限可能出现的一些错误:

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;
    }

答案 1 :(得分:0)

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

将您的控制器名称更改为Home.phpHome。 Bcz你的网址包含索引是非常糟糕的

在控制器中

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;
        }
    }
}