我在登录时为用户分配一个令牌,此令牌将存储在数据库中,并将在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'
我认为一旦第一个错误得到解决,其他错误就会消失。 我怎么做?我在这做错了什么? 感谢您的建议
答案 0 :(得分:1)
返回row()
而不是result()
,您的模型应该是这样的:
和date_diff()
中的日期应该是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;
}
}
}
答案 1 :(得分:0)
$responce->result()
返回一个对象或数组
请参阅doc:https://www.codeigniter.com/userguide3/database/results.html
如果您确定只有一行:
$row = $responce->result()
$date = strtotime($row->expired_at);