strtotime()期望参数1是字符串,在codeigniter中给出的数组

时间:2018-06-10 10:04:11

标签: php codeigniter mysqli codeigniter-3

我在登录时为用户分配一个令牌,此令牌将存储在数据库中,并将在12小时内过期。

为此,当用户登录时,它将显示在视图中,

**我的观点是**

 dir: '%kernel.project_dir%/src/Entity'

当他点击它时,

我的控制器

<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";
    }


 }

数据库

在user_auth表中,我有,

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...
  }

}

但是当我这样做时,错误发生如下,

  

strtotime()期望参数1为字符串,给定数组

     

date_diff()期望参数1为DateTimeInterface,布尔值为

     

尝试获取非object0的属性

     

使用未定义的常数h - 假设'h'

我认为一旦第一个错误得到解决,其他错误就会消失。 我怎么做?我在这做错了什么? 感谢您的建议

2 个答案:

答案 0 :(得分:1)

返回row()而不是result(),您的模型应该是这样的:

date_diff()中的日期应该是date_create()

中的DateTime对象
   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

答案 1 :(得分:0)

$responce->result()返回一个对象或数组

请参阅doc:https://www.codeigniter.com/userguide3/database/results.html

如果您确定只有一行:

$row = $responce->result()
$date = strtotime($row->expired_at);