Reputation:
When I login, it doesn't return the correct user_id
that belongs to the username. Instead, I got this error message:
Error Number: 1054 Unknown column '0' in 'where clause' SELECT * FROM (user) WHERE 0 = 'user_id' AND 1 IS NULL Filename: C:\Xampp\htdocs\codeigniter-cms\system\database\DB_driver.php Line Number: 330
How am I able to get the correct user_id
that belongs to the username that is logged in?
User lib is auto loaded.
<?php
class User {
public function __construct() {
$this->CI =& get_instance();
}
public function getUserID($user_id) {
if ($this->CI->session->userdata('username')) {
return $this->CI->db->get_where('user', array('user_id', $user_id));
} else {
return false;
}
}
}
Controller
public function index() {
$this->document->setTitle($this->lang->line('heading_title'));
$data['text_logged'] = sprintf($this->lang->line('text_logged'), '<strong>' . $this->user->getUsername() . '</strong>');
$data['user_id'] = $this->user->getUserID($user_id);
$data['logout'] = site_url('admin/common/logout');
return $this->load->view('common/dashboard', $data);
}
Upvotes: 0
Views: 91
Reputation:
I am now able to get my user id correct. When I have logged on.
I had to add a function in my login validate area in my user library.
I added it to set sessions and now can get correct id.
Here what added
$this->CI->db->select('user_id');
$this->CI->db->where('username', $this->CI->input->post('username'));
$query = $this->CI->db->get('user');
$row = $query->row();
$data = array(
'isLogged' => TRUE,
'user_id' => $row->user_id,
'username' => $this->CI->input->post('username')
);
$this->CI->session->set_userdata($data);
User Lib
<?php
class User {
public function __construct() {
$this->CI =& get_instance();
}
public function login() {
$this->CI->load->library('password');
$this->CI->db->select('password');
$this->CI->db->where('username', $this->CI->input->post('username'));
$query = $this->CI->db->get('user');
$row = $query->row();
if ($this->CI->password->validate_password($this->CI->input->post('password'), $row->password)) {
$this->CI->db->select('user_id');
$this->CI->db->where('username', $this->CI->input->post('username'));
$query = $this->CI->db->get('user');
$row = $query->row();
$data = array(
'isLogged' => TRUE,
'user_id' => $row->user_id,
'username' => $this->CI->input->post('username')
);
$this->CI->session->set_userdata($data);
return true;
} else {
$this->CI->session->set_flashdata('error', 'Incorrect Username Or Password! Please Try Again');
return false;
}
}
public function logout() {
$this->CI->session->sess_destroy();
}
public function getUsername() {
return $this->CI->session->userdata('username');
}
public function getUserID() {
return $this->CI->session->userdata('user_id');
}
}
Upvotes: 0
Reputation: 25435
I believe you mean:
return $this->CI->db->get_where('user', array('user_id'=> $user_id));
You're now passing 2 values in your array, not just a key=>value pair
Upvotes: 3