2017-08-03 64 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);