2012-03-06 33 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;  
} 

主叫

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

當通過按引用,而不是通過按值,實質上是一個指針傳遞(存儲器地址)到存儲器中保存值而不是實際值的位置;因此,當您更改方法中的值時,調用方傳遞的參數也會更改。這是因爲它們都指向相同的內存地址。

0

如果你更新你的SELECT語句搶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,我可以在'TRUE'中做到這一點嗎?我將如何通過控制器傳遞它,因爲模型需要一個值? – 2012-03-06 06:40:34

+0

當然,對不起,我不能在另一個幫助更多!是的,我會把它放在與你的'TRUE'相同的條件下。實際上,您可以考慮將其用作返回值。只要你使用隱式平等('==',而不是'==='),它仍然會在另一邊測試'true'。更新我的答案... – rjz 2012-03-06 06:42:57

+0

謝謝,有無論如何,我可以訪問它像$ this-> users_model-> confirmUser($ activateCode) - > userFirstName; – 2012-03-06 06:51:09