2017-08-03 63 views
0

我的web应用程序中的用户登录有问题。我想要做的是更新特定用户的last_online_at值,并在当前日期和时间之前将其登录到主页面。但是,它并没有像我期望的那样更新。CodeIgniter无法更新数据库

这里是我的代码:

... 

if($result != FALSE){ 
    $this->db->select('name'); 
    $this->db->from('user_type'); 
    $this->db->where("id ='" . $result[0]->user_type_id . "'"); 

    $query = $this->db->get(); 

    $session_data = array('first_name' => $result[0]->first_name, 
          'last_name' => $result[0]->last_name, 
          'username' => $result[0]->username, 
          'email' => $result[0]->email, 
          'id' => $result[0]->user_id, 
          'created_at' => date_parse($result[0]->created_at), 
          'recent_searches' => array(), 
          'food_tray' => array('Sample', 'Test', 'Qwerty'), 
          'logged_in' => TRUE, 
          'user_type' => $query->row()->name, 
          'user_type_id' => $result[0]->user_type_id, 
          'user_privileges' => array()); 

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

    // LINE OF CODE RESPONSIBLE FOR UPDATING `last_online_at` VALUE // 

    $data = array('last_online_at' => date('Y-m-d H:i:s')); 

    $this->db->update('user', $data, 'id =' . $session_data['id']); 

    ///////////////////////////////////////////////////////////////// 

    if($session_data['user_type'] == 'Customer'){ 
     // REDIRECT TO USER PAGE 
     redirect(base_url() . "index.php/main"); 
    }else if($session_data['user_type'] == 'Aggregator' || 
      $session_data['user_type'] == 'Restaurant Owner' || 
      $session_data['user_type'] == 'System Admin'){ 
     // REDIRECT TO ADMIN DASHBOARD 
     redirect(base_url() . "index.php/admin?page_view=admin_dash"); 
    }    
} 

你可以从给定的代码片段看,我用变量$session_data['id']替换为参数值来更新查询的WHERE子句,这是在一个不起作用。但是当我将其替换为静态值时,例如1,它将平稳运行并根据给定的静态值更新记录

我是否在做这个错误?任何帮助,将不胜感激

+0

那么什么是变量$ a的var_dump session_data是什么样子的?使用var_dump($ session_data);然后你可以看到id是否被正确设置。 – TimBrownlaw

+0

谢谢,这对我有用!我刚才观察到,当我var_dumped session_data时,事实证明id的值为'NULL',并且已经用正确的数组索引 – Chamber

+0

取代了它非常好:)观察变量以验证它们正在做什么总是件好事你认为他们应该做... – TimBrownlaw

回答

0

所以首先你需要确保$session_data['id']是有正确的价值。

所以才试图通过$session_data

echo "<pre>"; 
print_r($session_data); 
echo "</pre>"; 

我也建议你使用CodeIgniter的日志用印刷物究竟包含。

log_message('debug', 'Your Session Data: '.print_r($session_data, TRUE)); 
log_message('debug', 'You can see last executed query also: '.print_r($this->db->last_query(), TRUE)); 

使用前请启用日志表单配置。

这种技术可以帮助您获取代码中发生的情况。

而对于更新,最后一次登录的日期试试这个:

$data = array('last_online_at' => date('Y-m-d H:i:s')); 
$this->db->where('id', $session_data['id']); 
$this->db->update('user', $data);