user3300065
user3300065

Reputation:

Logging-in doesn't return correct user ID

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

Answers (2)

user3300065
user3300065

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

Damien Pirsy
Damien Pirsy

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

Related Questions