IF未执行后的PHP代码

时间:2012-01-06 21:37:55

标签: php codeigniter if-statement

我有这个功能

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。

1 个答案:

答案 0 :(得分:3)

正如我上面评论的那样,您的更新声明需要分开。你需要改变这一行:

$this -> db -> update('users') -> where('id = ' . "'" . $user_id . "'"); 

到此:

$this->db->where('id = ' . "'" . $user_id . "'"); 
$this->db->update('users');

请注意在update语句之后where子句被“清空”,如果您计划将来再进行多次更新,那么您将不得不重复where子句。