Как отобразить живого онлайн-пользователя в системе с помощью CodeIgniter? - PullRequest
0 голосов
/ 16 сентября 2018

Я использую CodeIgniter, я показываю онлайн-пользователя, использующего CodeIgniter.

Я попробовал какой-то код, но сейчас я в замешательстве.

Справочное видео.Я учусь на этом видео

https://www.webslesson.info/2017/08/display-online-users-using-php-mysql-with-ajax-jquery.html

ИЛИ

Шаг: 1 https://www.youtube.com/watch?v=aAG3w8l8lL8

Шаг: 2 https://www.youtube.com/watch?v=L__8vVJT57U

Вот мой код.

Логин Подтвердите пароль

Если пароль правильный, то он вставит время и идентификатор пользователя в базу данных..

    if ($result) {             
    if(password_verify($password,$result->password))
        {
            $data_login= array('emp_id' =>$result->id ,'last_activity' =>date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa'))));
            $this->db->insert('tbl_current_login',$data_login);  
            $last_id=$this->db->insert_id();
            if (!empty($last_id)) {
            $active_user_session = array('id' => $result->id,'access_role'=>$result->access_role);
            $this->session->set_userdata('active_user_session',$active_user_session);
            return $result;

                }

                else 
                {
                    return false;
                }       
    }

    else{
        return false;
    }
}

Теперь я обновил скрипт на странице индекса.

$(document).ready(function(){
   <?php 
    if ($this->session->userdata['active_user_session']['id']) {?>
    function update_user_activity(){
       var active_time='update_time';
           $.ajax({
              url:"<?php echo base_url(); ?>/Employee_control/update_login_time",
                method:"POST",
                data:{active_time:active_time},
                success:function(data){
                 //alert(data);
                   }
                   });
                 }
              setInterval(function(){
               update_user_activity()
                 },3000);
              <?php
               }?>
             });

Контролер сотрудника

public function update_login_time(){
     $active_time=trim($this->input->post('active_time'));
     if (isset($active_time)) {
          $this->Employee_model->update_last_login();
     }
}

Сотрудникмодель

public function update_last_login(){
      $data = array(
                   'last_activity' =>date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa'))),
                   'emp_id' =>$this->session->userdata['active_user_session']['id']
                );

    $this->db->where('emp_id', $this->session->userdata['active_user_session']['id']);
    $this->db->update('tbl_current_login', $data); 
    }

Теперь моя проблема заключается в том, что если пользователь войдет в систему первый раз, тогда время входа будет занесено в таблицу, а если пользователь войдет во второй раз, то он снова вставит новое время входа.Правильно?.Существует некоторая проблема с обновлением.Он обновляет все время last_activity, которое связано с идентификатором.Если это правда, то в конце дня, как мы можем определить общее количество часов, в которые пользователь вошел?и как мы можем проверить историю пользователя, если мы обновляем все время last_activity?

enter image description here

Я просто хочу отобразить живого онлайн-пользователя всистема.Не могли бы вы помочь мне с этим вопросом?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы устанавливаете данные сеанса active_user_session, используя приведенный ниже код в методе проверки входа в систему.

$active_user_session = array('id' => $result->id,'access_role'=>$result->access_role);
$this->session->set_userdata('active_user_session',$active_user_session);

Если идентификатор пользователя равен 8, то значение $result->id выше будет равно 8, и это такжеозначает, что $this->session->userdata['active_user_session']['id'] в приведенном ниже коде вашей модели будет 8

public function update_last_login(){
    $data = array(
               'last_activity' =>date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa'))),
               'emp_id' =>$this->session->userdata['active_user_session']['id']
            );

    $this->db->where('emp_id', $this->session->userdata['active_user_session']['id']);
    $this->db->update('tbl_current_login', $data); 
}

Если текущее время равно 2018-09-16 08:59:16, код вашей модели выше генерирует и выполняет следующий запрос

UPDATE tbl_current_login
SET last_activity = '2018-09-16 08:59:16', emp_id = 8
WHERE emp_id = 8

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

UPDATE tbl_current_login
SET last_activity = '2018-09-16 08:59:16'
WHERE login_id = 5

Чтобы получить правильный запрос, измените эту часть кода в методе проверки входа в систему

$data_login = array('emp_id' =>$result->id ,'last_activity' =>date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa'))));
$this->db->insert('tbl_current_login',$data_login);  
$last_id=$this->db->insert_id();
if (!empty($last_id)) {
    $active_user_session = array('id' => $result->id,'access_role'=>$result->access_role);
    $this->session->set_userdata('active_user_session',$active_user_session);
    return $result;
}

на этот

$data_login = array('emp_id' =>$result->id ,'last_activity' =>date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa'))));
$this->db->insert('tbl_current_login',$data_login);  
$last_id=$this->db->insert_id();
if (!empty($last_id)) {
    // $last_id is the id of the tbl_current_login record inserted above
    // pass it to the array below
    $active_user_session = array('id' => $last_id,'access_role'=>$result->access_role);
    $this->session->set_userdata('active_user_session',$active_user_session);
    return $result;
}

затем измените код вашей модели на

public function update_last_login(){
    $data = array(
                   'last_activity' =>date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa')))
                );

    $this->db->where('login_id', $this->session->userdata['active_user_session']['id']);
    $this->db->update('tbl_current_login', $data); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...