2012-01-06 2 views
0

У меня есть эта функцияPHP код после IF не исполняется

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) { 

верно и код внутри, если скобки выполняется, то остальные две строки кода:

$this -> session -> unset_userdata('user_id'); 

    echo "logged out? <a href=" . base_url() . ">click here</a>"; 

Пока код if не выполняется, эти строки выполняются правильно.

Код внутри if выполнен правильно, потому что cookie удаляется и база данных обновляется.

Я использую Codeigniter 2.1.0, но я не думаю, что проблема была устранена.

Мой PHP версия 5.3 под локального хоста на Ubuntu 11.04

+1

У меня трудное время после вашей проблемы. Когда выполняется внутреннее заявление If, следующие две строки кода не выполняются должным образом? Это то, что вы пытаетесь сказать? –

+1

Возможно ли, что «обновление» имеет фатальную ошибку или «выход» или что-то в конце? Как насчет 'unset_userdata'? –

+0

Я не совсем уверен, что вы можете связать команды db, как вы. Переместите предложение where на его вызов db ... $ this-> db-> где (""), а затем запустите $ this-> db-> update(). Опять же, я не уверен, что это неправильно. Я никогда не видел, чтобы это делалось именно так. –

ответ

3

Как я заметил выше, ваши обновления заявление должно быть отделено из. Вы должны Ставить эту строку:

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

к этому:

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

Имейте в виду, что где оговорка «опорожнить» после обновления заявление, и если вы планируете делать больше, чем одно обновление в будущее, тогда вам придется повторить предложение where.

+0

Это проблема, но это странно, для других типов запросов это работает, и запрос выполняется правильно, но, возможно, по какой-то причине он не работает. Как вы можете прочитать здесь http://codeigniter.com/user_guide/database/active_record.html метод цепочки является доступным с php5, и он хорошо подходит для выбора до сих пор –

+0

например, эта работа $ this -> db -> set (' активация_кода ',' активирована '); $ this -> db -> update ('users') -> где ('activation_code ='. "'". $ Code. "'"); –

+0

, чтобы уточнить, где должно быть до обновления. Попробуйте следующее: $ this-> db-> где ('id, $ id) -> update (' page ', $ data); –