Просмотр / извлечение данных пользователя при входе в систему - CodeIgniter - PullRequest
1 голос
/ 30 января 2020

Моя проблема в том, что мои данные извлекаются сразу, все они. Мне нужно просматривать данные каждого пользователя, когда я на разных вошедших в систему пользователя. Например: для user1 мне нужно иметь Product1 и user2 мне нужно иметь Product2, но сейчас все, что я получаю, это то, что я могу получить все данные пользователя.

вот мои Модель

Как видите, я добавил свой запрос на присоединение, но все еще извлекаю все свои данные

public function showAllReviewers(){
   $this->db->join('teachers', 'teachers.id = reviewers.user_id');
   $query = $this->db->get('reviewers');
      if($query->num_rows() > 0){
        return $query->result();
      }else{
        return false;
      }
}

Мой Контроллер

public function showAllReviewers()
{
    $result = $this->reviewer_model->showAllReviewers();
    echo json_encode($result);
}

My View

  <tbody id="showdata">

  </tbody>

Я использую ajax / js для извлечения моих данных, так что вот мой сценарий ajax / js для дополнительного информация

    //function
    function showAllReviewers(){
        $.ajax({
            type: 'ajax',
            url: '<?php echo base_url() ?>reviewers/showAllReviewers',
            async: false,
            dataType: 'json',
            success: function(data){
                var html = '';
                var i;
                for(i=0; i<data.length; i++){
                    html +='<tr class="table-info">'+
                                '<td>'+data[i].subject+'</td>'+
                                '<td>'+data[i].category+'</td>'+
              '<td>'+data[i].set_rev+'</td>'+
              '<td>'+data[i].group_name+'</td>'+
                                '<td>'+
                                    '<a href="javascript:;" class="btn btn-info item-edit" data="'+data[i].id+'"> <span class="iconify" data-icon="bx:bx-edit" data-inline="false"></span> </a> '+
                                    '<a href="javascript:;" class="btn btn-danger item-delete" data="'+data[i].id+'"> <span class="iconify" data-icon="bx:bx-trash" data-inline="false"></span> </a>'+
                                '</td>'+
                            '</tr>';
                }
                $('#showdata').html(html);
            },
            error: function(){
                alert('Could not get Data from Database');
            }
        });
    }

РЕДАКТИРОВАТЬ: контроллер входа в систему

 // Log in teacher
  public function login(){
    $this->form_validation->set_rules('code', 'Code', 'required');
    $this->form_validation->set_rules('password', 'Password', 'required');

    if($this->form_validation->run() === FALSE){
        $this->load->view('templates/header');
        $this->load->view('teachers/login');
        $this->load->view('templates/footer');
    } else {

        // Get code
        $code = $this->input->post('code');
        // Get and encrypt the password
        $password = $this->input->post('password');

        // Login user
        $user = $this->teacher_model->login($code, $password);

        if($user){
            // Create session
            $user_data = array(
                'user_id' => $user->id,
                'name' => $user->name,
                'code' => $code,
                'logged_in' => true
            );

            $this->session->set_userdata($user_data);

            redirect('teacher/home');
        } else {
            redirect('teachers/login');
        }
    }
}

Ответы [ 2 ]

1 голос
/ 30 января 2020

Ну, вы можете хранить пользовательские данные, такие как id et c в сеансе, когда пользователь входит в систему, как показано ниже в вашем контроллере:

$this->session->set_userdata('user_details', $user_data); // say user_details is the key we store it in

В вашей модели вы можете сделать следующее:

<?php


public function showAllReviewers(){
   $this->db->join('teachers', 'teachers.id = reviewers.user_id');
   $this->db->where('reviewers.user_id',$this->session->userdata('user_details')['user_id']);
   $query = $this->db->get('reviewers');
   if($query->num_rows() > 0){
    return $query->result();
   }else{
    return false;
   }
}

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

<?php

class YourModel extends CI_Model{
    private $user_id;

    function __construct(){
        $this->user_id = $this->session->userdata('user_details')['user_id'];
    }

    public function showAllReviewers(){
       $this->db->join('teachers', 'teachers.id = reviewers.user_id');
       $this->db->where('reviewers.user_id',$this->user_id);
       $query = $this->db->get('reviewers');
       if($query->num_rows() > 0){
        return $query->result();
       }else{
        return false;
       }
    }
}
1 голос
/ 30 января 2020

Вы должны добавить условие where в запрос Sql функции showAllReviewers (), передав текущий зарегистрированный идентификатор пользователя / учителя. Или в случае CI вы можете получить то же самое, используя функцию isLogged / getId, которая раньше присутствовала в system / библиотека / клиент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...