2012-09-08 149 views
0

這是here表單驗證錯誤

一個繼續的問題的情況是:之後我添加了一個隱藏字段,現在我可以更新,但我不能保存,因爲每次我試圖挽救,這個錯誤消息不斷顯示出來:The User ID field is required.

這是控制器,附加功能是保存和更新更新:

function add(){ 
    //set common properties 
    $data['title'] = 'Tambah User baru'; 
    $data['action'] = site_url('user/add'); 
    $data['link_back'] = anchor('user/index/', 'Back to User list', array('class'=>'back')); 

    //bedakan add/update 
    $data['validate'] = 'add'; 

    $this->_set_rules(); 
    //run validation 
    if($this->form_validation->run() == false){ 
     $data['message'] = ''; 

     $data['title'] = 'Add new User'; 
     //$data['message'] = ''; 
     $data['user']['ID_user'] = ''; 
     $data['user']['pass'] = ''; 
     $data['user']['nama'] = ''; 
     $data['user']['email'] = ''; 
     $data['user']['active'] = ''; 
     $data['link_back'] = anchor('user/index/', 'Lihat daftar User', array('class'=>'back')); 

     $this->load->view('user_form_v', $data); 
    } 

    else{ 
     //save data 
     $user = array('ID_user'=>$this->input->post('ID_user'), 
     'pass'=>sha1($this->input->post('pass')), 
     'nama'=>$this->input->post('nama'), 
     'email'=>$this->input->post('email'), 
     'active'=>$this->input->post('active'), 
     'regis_date'=>date('Y-m-d H:i:s')); 

     $ID_user = $this->user_m->save($user); 

     //set form input nama = "id" 
     $this->validation->ID_user = $ID_user; 

     redirect('user/index/add_success'); 
    } 
} 

function update($ID_user){ 
    //set common properties 
    $data['title'] = 'Update user'; 
    $this->load->library('form_validation'); 

    //set validation properties 
    $this->_set_rules(); 
    $data['action'] = ('user/update/'.$ID_user); 

    //bedakan add/update 
    $data['validate'] = 'update'; 

    //run validation 
    if ($this->form_validation->run() == false){ 
     $data['message'] = ''; 

     $data['user'] = $this->user_m->get_by_id($ID_user)->row_array(); 
     //set common properties 
     $data['title'] = 'Update User'; 
     $data['message'] = ''; 
    } 
    else{ 
     //save data 
     $ID_user = $this->input->post('ID_user'); 
     $user = array(
     'pass'=>$this->input->post('pass'), 
     'nama'=>$this->input->post('nama'), 
     'email'=>$this->input->post('email'), 
     'active'=>$this->input->post('active'), 
     'regis_date'=>date('Y-m-d H:i:s')); 

     $this->user_m->update($ID_user, $user); 
     $data['user'] = $this->user_m->get_by_id($ID_user)->row_array(); 

     //set user message 
     $data['message'] = 'Update User Success!'; 
    } 

    $data['link_back'] = anchor('user/index/', 'Lihat daftar user', array('class'=>'back')); 
    //load view 
    $this->load->view('user_form_v', $data); 
} 

這是我的看法:

<input type="text" name="ID_user" class="text" 
       <?php if($validate!='add'){echo "disabled";} ?> 
       value="<?php echo (isset($user['ID_user']))?$user['ID_user']:""?>"/> 
       <input type="hidden" name="ID_user" value="<?php echo (isset($user['ID_user']))?$user['ID_user']:""?>"/> 

注:如果隱藏輸入文本和輸入的名稱相同,則更新工作,但保存不工作,但如果名稱不同,則更新沒有工作,但保存工作@_ @

回答

1

只需將隱藏的輸入元素放置在禁用的元素上方即可。

<input type="hidden" name="ID_user" value="<?php echo (isset($user['ID_user']))?$user['ID_user']:""?>"/> 
<input type="text" name="ID_user" class="text" 
       <?php if($validate!='add'){echo "disabled";} ?> 
       value="<?php echo (isset($user['ID_user']))?$user['ID_user']:""?>"/> 

此問題出現是因爲該值被隱藏的輸入元素(在「保存」頁面中爲空)所覆蓋。通過在可能或不可禁用之前移動隱藏的一個,「保存」和「更新」頁面都可以正常工作。在更新頁面中,它將起作用,因爲如果輸入被禁用,它將不會被髮送到服務器(即它不會覆蓋隱藏的)。

但是,在我看來,使用隱藏的輸入不是很安全。用戶可以通過使用Firebug或Chrome開發人員工具等工具編輯HTML來輕鬆更改該值。相反,您可能希望將會話視爲解決方案。

+0

非常感謝你,你救了我的一天爵士:d 順便說一句,你能解釋一下在哪裏插入一個變量到我的隱藏元素?我真的不明白這個代碼,特別是隱藏的輸入一個 –

+0

@BlazeTama你是什麼意思?您已經爲代碼中的隱藏輸入輸出了必要的變量。 –

+0

好吧,我現在緩慢地得到它..謝謝:D –

1

你shold給輸入文本不同的名稱,輸入hidden.You給出兩個「ID_user」。嘗試這樣

<input type="text" name="ID_user" class="text" 
      <?php if($validate!='add'){echo "disabled";} ?> 
      value="<?php echo (isset($user['ID_user']))?$user['ID_user']:""?>"/> 
      <input type="hidden" name="ID_user_hidden" value="<?php echo   (isset($user['ID_user']))?$user['ID_user']:""?>"/> 
+0

謝謝,但我更改隱藏的名稱後,更新不再工作(錯誤出現),但保存工作@ _ @ 我該怎麼辦? –

+1

@BlazeTama如果你真的只想要一個快速修復解決方案,只需在禁用之前將隱藏的元素向上移動即可。 –

+0

哦,在更新頁面中,我得到錯誤.. ???然後張貼從ID包含的ID值到你的視圖文件 – Gautam3164