strtotime () ожидает, что параметр 1 будет строкой, а массив указан в codeigniter - PullRequest
0 голосов
/ 10 июня 2018

Я назначаю токен пользователю, когда он входит в систему, этот токен будет сохранен в базе данных и истекает через 12 часов.

Для этого, когда пользователь входит в систему, он будет показан в виде,

** мой взгляд **

<a href=" <?php echo site_url('admin/checkval') ?> ">check valididty of token</a>

когда он нажимает на это,

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

public function checkval(){

    $this->load->library('session');

    $goal = $this->session->userdata('user_id');
    $uid = $goal[0];
    $token = $goal[1];
    $this->load->model('loginmodel');

    $check_id = $this->loginmodel->token_valid($uid, $token);
    if($check_id){
      $data['query'] = $this->loginmodel->get_last_ten_entries();
       $this->load->view('admin/account', $data);
       print_r($data);
      echo "valid";
    }else {
        echo "invalid";
    }


 }

если его токен действителен, ему будет показан список пользователей

модель

public function token_valid($uid, $token){

  $responce = $this->db->query("SELECT expired_at FROM user_auth 
                                WHERE id = '$uid' AND token = '$token'");
  $date = strtotime($responce->result());
  echo "$date";
  $cdate = date("Y-m-d H:i:s");
  $cdate = strtotime($cdate);
  $interval = date_diff($date,$cdate);
  $hour = $interval->h;
  if(h<12){
    return TRUE;
  }else {
  return FALSE;  // code...
  }

}

база данных

In user_authу меня есть таблица,

id int(50),token varchar(500),expired_at datetime

, но когда я это делаю, ошибка происходит следующим образом:

strtotime () ожидает, что параметр 1 будет строкой, массив будет дан

date_diff () ожидает, что параметр 1 будет DateTimeInterface, логическое значение задано

Попытка получить свойство необъектного0

Использование неопределенной константы h - предполагается, что 'h'

Я думаю, что как только первая ошибка будет устранена, другие исчезнут.Как я могу это сделать?Что я здесь не так делаю?Спасибо за ваши предложения

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

$responce->result() вернуть объект или массив

См. Документ: https://www.codeigniter.com/userguide3/database/results.html

Если вы уверены, что у вас есть только одна строка:

$row = $responce->result()
$date = strtotime($row->expired_at);
0 голосов
/ 10 июня 2018

Возвращает row() вместо result(), ваша модель должна выглядеть следующим образом:

, а дата в date_diff() должна быть объектами DateTime из date_create()

   public function token_valid($uid, $token)
   {
      $this->db->select('expired_at');
      $this->db->from('user_auth');
      $this->db->where('id',$uid);
      $this->db->where('token',$token);
      $query = $this->db->get();
      if ($query->num_rows() > 0)
      {
          $expired_date = $query->row()->expired_at;

          $expired_date = date_create($expired_date);
          $cdate = date_create('now');
          $interval = date_diff($expired_date,$cdate);
          $hour = $interval->h;
          if($hour < 12)
          {
            return TRUE;
          }else 
          {
            return FALSE;  
          }
      }   
   }

Для более: http://php.net/manual/en/datetime.diff.php

...