我有这个功能
public function logout() {
if ($this -> user_model -> is_logged() === TRUE) {
$user_id = $this -> user_model -> get_id();
if (get_cookie('cookie_name') != FALSE) {
delete_cookie('cookie_name');
$new_cookie = md5(sha1(rand() . time() . $user_id));
$this -> db -> set('cookie', $new_cookie);
$this -> db -> update('users') -> where('id = ' . "'" . $user_id . "'");
}
$this -> session -> unset_userdata('user_id');
echo "logged out? <a href=" . base_url() . ">click here</a>";
} else {
echo "no";
}
}
何时
if (get_cookie('cookie_name') != FALSE) {
为true,执行if括号内的代码,然后执行其他两行代码:
$this -> session -> unset_userdata('user_id');
echo "logged out? <a href=" . base_url() . ">click here</a>";
当if代码没有被执行时,这些行被正确执行。
if中的代码是否正确执行,因为cookie被删除并且数据库已更新。
我正在使用Codeigniter 2.1.0,但我不认为问题与此相关。
我的php版本在Ubuntu 11.04上的localhost下是5.3。
答案 0 :(得分:3)
正如我上面评论的那样,您的更新声明需要分开。你需要改变这一行:
$this -> db -> update('users') -> where('id = ' . "'" . $user_id . "'");
到此:
$this->db->where('id = ' . "'" . $user_id . "'");
$this->db->update('users');
请注意在update语句之后where子句被“清空”,如果您计划将来再进行多次更新,那么您将不得不重复where子句。