2012-03-06 2 views
0

У меня есть следующий код, подтверждающий активацию с базой данных. То, чего я не хочу сейчас, - это лучший способ включить меня, так что выведите имя пользователя userFirstName, связанное с конкретным кодом активации? и как бы передать его как $data['userFirstName'] = What в контроллер.Codeigniter -> Извлечение дополнительных данных

Модель:

function confirmUser($activateCode) 
{ 
    if($activateCode == '') 
    { 
     return FALSE; 
    } 
//Selects the userID where the given URI activateCode = ? 

    $this->db->select('userID'); 
    $this->db->from('users'); 
    $this->db->where('userActiveCode', $activateCode); 

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

    if($result->num_rows == 1) // If the above result is = 1 then update the userActive row else it will fail 
    { 
     $this->db->set('userActive', 1); 
     $this->db->where('userActiveCode', $activateCode); 
     $this->db->update('users'); 

     return TRUE; 
    }else{ 
     return FALSE; 
    }  

} 

ответ

1

Вы также можете использовать ссылочный параметр для вашей модели метод вернуть имя пользователя к абоненту. Это позволит получить чистое логическое возвращаемое значение.

Модель

function confirmUser($activateCode, &$userFirstName) 
{ 
    if($activateCode == '') 
     return false; 

    $this->db->select('userID, userFirstName'); 
    $this->db->from('users'); 
    $this->db->where('userActiveCode', $activateCode); 

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

    if($result->num_rows == 1) 
    { 
     $this->db->set('userActive', 1); 
     $this->db->where('userActiveCode', $activateCode); 
     $this->db->update('users'); 

     $userFirstName = $result->row()->userFirstName; 
     return true; 
    } 
    else 
     return false;  
} 

Caller

$userFirstName = ''; 
if ($this->user_model->confirmUser($activate_code, $userFirstName)) 
    //userFirstName will be populated 
    $data['userFirstName'] = $userFirstName; 
else 
    //userFirstName will still be empty 

При переходе по ссылке, в отличие от ближнего по значению, вы, по сути, проходящей указатель (адрес памяти) на место в памяти, которое содержит значение, а не фактическое значение; поэтому, когда вы изменяете значение в методе, параметр, который был передан по ссылке вызывающим, также изменяется. Это связано с тем, что они оба указывают на то же точное адрес памяти.

0

Если вы обновляете отборное заявление, чтобы захватить userFirstName тоже, вы будете иметь доступ к нему в результатах:

// setting up the query 
$this->db->select('userID, userFirstName'); 
$this->db->from('users'); 
$this->db->where('userActiveCode', $activateCode); 

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

if($result->num_rows == 1) 
{ 
    $this->db->set('userActive', 1); 
    $this->db->where('userActiveCode', $activateCode); 
    $this->db->update('users'); 

    return $result->row()->userFirstName; 
}else{ 
    return FALSE; 
}  

На стороне контроллера, confirmUser сейчас возвращает имя пользователя (если доступно) или false при сбое. Это позволяет сделать что-то вроде этого:

if ($username = $my_model->confirmUser) { 
    echo 'Welcome, ' . $username; 
} else { 
    echo 'Failed checking confirmation token'; 
} 
+0

Еще раз спасибо rjz, могу ли я это сделать в рамках "ИСТИННОГО"? & как передать его через контроллер, так как модель требует значения? –

+0

Несомненно, извините, я не мог больше помочь с другой! Да, я бы поставил его в том же условном, что и ваш «ИСТИНА». На самом деле вы можете использовать его как возвращаемое значение. Он по-прежнему будет тестировать 'истину' с другой стороны, если вы используете неявное равенство (' == ', а не' === '). Обновление моего ответа ... – rjz

+0

Спасибо, есть в любом случае, что я могу получить к нему доступ, как $ this-> users_model-> confirmUser ($ activateCode) -> userFirstName; –