Как я могу показать данные пользователя, в настоящий момент войдите в codeigniter - PullRequest
1 голос
/ 08 октября 2019

Я попытался показать столбец данных "role_name" в таблице ролей. в противном случае в пользовательской таблице есть "role_id", который был внешним ключом для столбца "id" в таблице ролей. но когда я называю это, данные были нулевыми.

Это мой контроллер:

class Member extends CI_Controller {

  public function index(){
    $data['title'] = 'My Profile';
    $data['user'] = $this->db->get_where('user', ['email' => $this->session->userdata('email')])->row_array();
    $data['role'] = $this->db->get_where('role', ['id' => $this->session->userdata('role_id')])->row_array();
    var_dump($data);
    die;

и это представление:

array(3) { ["title"]=> string(10) "My Profile" ["user"]=> array(11) { ["id"]=> string(1) "7" ["name"]=> string(10) "Imal Malik" ["email"]=> string(14) "imal@gmail.com" ["password"]=> string(60) "$2y$10$muXwl9cdeqc0aq45tEkGe.6hp.mRSX4wnz5RpRcGQIhQS8RbUGM1C" ["image"]=> string(11) "default.jpg" ["date"]=> string(10) "1570253690" ["role_id"]=> string(1) "2" ["active"]=> string(1) "1" ["phone"]=> string(12) "087666222333" ["place"]=> string(7) "Bandung" ["about"]=> string(52) "Hai! I'am Malik, I have been Programmer Since 1900s." } ["role"]=> NULL }

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Наиболее эффективным способом было бы хранить эти данные в переменных сеанса при входе в систему. Затем вы можете получить к нему доступ в любое время, просто используя $this->session->userdata() вызовы в любом месте вашего сайта и сохраняя большое количество запросов к базе данных при каждой загрузке страницы (это может показаться не большой экономией, если на вашем сайте мало трафика, но еслиу вас есть сотни одновременно работающих пользователей, каждая из которых загружает несколько страниц за сеанс, вы смотрите на экономию тысяч запросов к базе данных в час)

При успешном входе в систему вы можете, например, построить и создать массив со всемиданные сеанса вам могут понадобиться. Например:

$sess_data = array(
  'user_id' => $user_id,
  'name' => $name,
  'last_name' => $last_name,
  'email' => $email,
  'access_level' => $access_level
);

и затем установите push весь массив в данные сеанса следующим образом:

$this->session->set_userdata('logged_in', $sess_data);

впоследствии, если вам нужно имя пользователя, просто echo $this->session->userdata['logged_in']['name'];

(да, я использую массив logged_in в данных сеанса, чтобы отделить пользовательские данные от других переменных сеанса, которые идут в отдельный массив в сеансе ... но это не обязательно делать)

, так как сеанс активен, результаты будут поступать из памяти, а не из запроса к базе данных, тем самым устраняя большую нагрузку на ваш сайт. Это немного больше, чтобы настроить это, но вы делаете это один раз в своей процедуре входа в систему, а затем просто забываете об этом.

0 голосов
/ 08 октября 2019

В качестве альтернативы, вы можете использовать role_id данные из полученной пользовательской записи вместо role_id из сеанса:

  public function index(){
    $data['title'] = 'My Profile';
    $data['user'] = $this->db->get_where('user', ['email' => $this->session->userdata('email')])->row_array();
    $data['role'] = $this->db->get_where('role', ['id' => $data['user']['role_id']])->row_array();
    var_dump($data);
    die;

Или, если вы предпочитаете использовать вместо этого:

    $this->db->select('*');
    $this->db->from('user');
    $this->db->join('role', 'user.role_id = role.id');
    $this->db->where('user.email', $this->session->userdata('email'));
    $data = $this->db->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...