这是来自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']:""?>"/>
注意:如果输入文本和输入隐藏的名称是SAME,则更新正在运行,但保存不起作用,但如果名称不同,则更新无效,但保存正在运行@_ @
答案 0 :(得分: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']:""?>"/>
出现此问题是因为隐藏的输入元素(在“保存”页面中为空)覆盖了该值。通过移动将隐藏的一个放在may之前或者可以不被禁用一个,“save”和“update”页面都可以正常工作。在更新页面中,它会起作用,因为如果输入被禁用,它将不会被发送到服务器(即它不会覆盖隐藏的输入)。
但是,在我看来,使用隐藏输入并不是很安全。用户可以使用Firebug或Chrome开发人员工具等工具编辑HTML,轻松更改价值。您可能希望将会话视为解决方案。
答案 1 :(得分:1)
你要为输入文字指定不同的名称,输入隐藏。你给了两个“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']:""?>"/>