Php 手动点击相同的控制器url方法会导致Codeigniter出错
我是Codeigniter的新手我被困在一个问题中,我到处搜索,但没有找到解决方案, 我的问题是,当我通过一个链接点击一个特定的控制器方法时,它对eg非常有效Php 手动点击相同的控制器url方法会导致Codeigniter出错,php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,我是Codeigniter的新手我被困在一个问题中,我到处搜索,但没有找到解决方案, 我的问题是,当我通过一个链接点击一个特定的控制器方法时,它对eg非常有效 http://localhost/MyProject/indexController/user_login_process 但当我在第一次正确渲染后手动点击该方法时,它会渲染视图,但存在以下错误。 请帮我解决我的问题: 控制器: 型号: 如果是会话问题,请尝试使用数据库管理会话: config.php $config['sess_driv
http://localhost/MyProject/indexController/user_login_process
但当我在第一次正确渲染后手动点击该方法时,它会渲染视图,但存在以下错误。
请帮我解决我的问题:
控制器:
型号:
如果是会话问题,请尝试使用数据库管理会话:
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;
}
试试这个。所有代码都已更改。仔细检查
将控制器名称更改为Home.php
,并在Home
内部更改。Bcz您的URL包含索引有些不好
在控制器中
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);
}
}
}
型号*(登录数据库)*
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;
}
}
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;
}
}
}
模型*(教学模型)*
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;
}
}
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;
}
}
}
我认为你的$this->t_model->get_all($u_id);返回null或空数组您可以显示视图和模型吗?当我通过单击链接转到此视图时,它正在正确呈现问题出现在我通过URL刷新它时实际上我的视图太大,它包含控制器返回的数据,并且在我通过单击链接加载它时工作问题出现在我重新加载页面或通过点击刷新它时手动url。我不想在会话中保留所有详细信息。我想在我的视图中循环并获取所有详细信息。此问题发生在所有此类页面中,因此我如何能够在会话中保留每个页面信息。请提供另一个解决方案。我已检查与会话无关。
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;
}
}
}