2013-08-04 61 views
2

我建立CI中的API,以及我在與一個UPDATE方法驗證的麻煩。我的表有3列(加號):如何驗證CodeIgniter中的非必填字段?

  • FIRST_NAME
  • 姓氏
  • 城市

我想客戶端能夠更新任何3列,並應用驗證規則(例如min_length [1])給客戶端想要更新的每個客戶端。

的問題是,如果客戶端員額在本:

first_name=Foo&last_name=

它跳過驗證last_name因爲笨認爲這是「空」,它通過我的驗證不是「必需的」。但是當活動記錄嘗試UPDATE記錄在MySQL,它設置last_name""(空)。

我不希望字段爲要求,但是如果它們被設置,它們應該有一個最小長度。

任何想法?

+0

傳遞從數據庫的當前值的視圖文件,並把它們插入在HTML的輸入爲默認值。驗證類在當前版本中存在一個錯誤,最近我在github上發佈了一個PR到CI Repository,並在v3.0中修復了這個錯誤。這裏是SO發出http://stackoverflow.com/questions/17771980/how-to-validate-array-value-in-codeigniter/17773575 –

+0

普萊斯發佈更新分貝 –

+0

@HashemQolami存在的代碼是沒有意見 - 這是輸出JSON的API。在驗證錯誤時,它只會迴應錯誤。 –

回答

0

試試這個我給你的方案其中一個例子是不是強制性的,對他們第一次擁有存儲在數據庫和剛發送空白任何必填字段的正好被清除該指數第二次用戶值的字段在你的數據庫來存儲,因此以前的值將保持在DB

$first_name=$this->input->post("first_name"); 
$last_name=$this->input->post("last_name"); 
$city=$this->input->post("city"); 
$data = array(
       'first_name' => $first_name, 
       'last_name' => $last_name, 
       'city' => $city 
      ); 

if(empty($last_name)){ 
unset($data['last_name']) 
} 
if(empty($city)){ 
unset($data['city']) 
} 
$this->db->where('id', $id); 
$this->db->update('mytable', $data); 

希望這是有道理的

+0

實際上'empty()'打破了'0'。改用'==='''運算符。 –

+0

謝謝,但由於內置驗證中的怪癖,做所有這些手動覆蓋似乎有點愚蠢。必須有一種方法可以正確地做到這一點...... –