2010-01-07 147 views
3

這是正確的嗎?注意第二個選項,我使用$ _POST變量傳遞表單值。鑑於第一個選項,我爲每個表單字段調用和分配變量。Codeigniter:將視圖中的表單數據傳遞給控制器​​

我已經看到了這個...

<validation code> .... 

$todo = array(
     'name'=>$this->input->post('title'), 
     'description'=>$this->input->post('description') 
); 

$this->Todo_model->add($todo); 

但我也看到了下面......

$records['email'] = "trim|required|min_length[4]|xss_clean"; 
... 
...  

$this->validation->set_rules($records); 

if ($this->validation->run()) 
{ 
    $this->account_model->saveAccountSettings("sam", $_POST); 
    $this->session->set_flashdata('message', 'Done!');    

    redirect('account/settings'); 
} else { 
... 
} 

回答

3

我傾向於使用你的兩個例子的混合。我非常肯定trim這樣的東西不會修改實際的發佈數據,所以如果你通過驗證框架來獲取數據,你只能利用它。我實際上從不再使用CI直接訪問POST。

另外我會擔心在你的第二個例子中,只是推動POST到我的模型。如果有人巧妙地將「姓氏」添加到發送的發佈數據中,並且您的數據庫列的名稱相同,會發生什麼情況?即使你現在不打算處理這些數據,但你已經得到了未經驗證的數據。這就是爲什麼我使用了第一個示例的一部分,並且首先手動將要保存的數據保存到數組中。

所以我建議一個混合動力車。

通常我的代碼看起來是這樣的:

$fields['email'] = "trim|required|valid_email|min_length[4]|xss_clean"; 
... 
...  

$this->validation->set_rules($fields); 

if ($this->validation->run()) 
{ 
    $account = new array(); 
    $account['id'] = $accountId; //wherever you get the Id from 
    $account['email'] = $this->validation->email; 

    $this->account_model->save($account); 
    $this->session->set_flashdata('message', 'Done!');    

    redirect('account/settings'); 
} else { 
... 
} 
+0

$account['email'] = $this->validation->email; 

這裏不理解這條線。 $ account ['email'] = $ this-> validation-> email; 它在做什麼?我的意思是我看到它正在驗證該領域,第一個領域是在哪裏發揮作用? – luckytaxi 2010-01-07 14:37:16

+0

你可以使用$ this-> validation->就像使用$ this-> input-> post('something')一樣。在通過驗證框架運行後,它會爲您提供POST的價值,同時考慮trim和XSS等內容。 – Parrots 2010-01-07 14:44:58

+0

是否必須在第一行定義「某些東西」?看看它說$ fields ['email'] ...就像我只設置了電子郵件的「驗證規則」,我可以做$ this-> validation-> id,是嗎? – luckytaxi 2010-01-07 14:49:27

0

第一個選項是更好易於閱讀或跟蹤 值傳遞使用後期變量是更好的選擇

0

什麼真正的好處使用相反的

$account['email'] = $this->input->post('email'); 
+0

這是一個很好的習慣,就是使用一個暗示該值已被驗證的語法來取值 – 2011-08-09 00:59:22

相關問題