2012-09-08 56 views
0

所以我有一个用于两个函数/条件形式:保存(添加)和更新 现在我设定的规则来我输入文本:$this->form_validation->set_rules('ID_user', 'User ID', 'required');在代码点火器不同条件表单验证

的逻辑是一样这样的:如果用户在保存条件,那么我输入的文本将被允许,因为他们会tyoe自己的ID,但如果用户在更新条件,那么我输入的文本将禁用和文本将是当前用户ID,因为他们不能更改他们的用户ID。

这是保存(添加),并在我的控制器更新功能:

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')); 

    $this->_set_rules(); 
    //run validation 
    if($this->form_validation->run() == false){ 
     $data['message'] = ''; 
     //bedakan add/update 
     $data['validate'] = 'add'; 
     //set common properties 
     $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']:""?>"/> 

的问题是:,而我的用户更新条件,他们希望,因为PHP认为该用户ID为空,以更新,显示错误消息,但事实是用户ID已经存在,我要做的就是只打印用户ID在我的输入型和残疾人它 氏s是错误消息:The User ID field is required.

+1

当比较boolean类似TRUE或FALSE时,你必须使用'==='ex,如果($ true === TRUE) – tomexsans

+0

@tomexsans我不这么认为,事情顺利地用“==”运行 谢谢:D –

+2

是的,它流畅的运行,但良好的做法使用===当比较布尔阅读此http://codeigniter.com/user_guide/general/styleguide.html#comparing_return_values_and_typecasting – tomexsans

回答

1

您可以将用户标识字段作为隐藏字段包含在更新表单中,以确保其与表单字段的其余部分一起提交。

<input type="hidden" name="user[ID_user]" value="<?=$user['ID_user']?>" /> 

只要确保以某种方式对照当前登录的用户验证它,以确保没有猴子与它并更改另一个用户的记录。

+0

感谢您的帮助:D –

+1

如果你打算使用这个解决方案,我会保持警惕。为什么请参阅TheShiftExchange的答案。 –

+0

我同意TheShiftExchange ...这就是为什么我在答复的最后一句说一定要验证它反对谁在登录(应保存在会话或饼干)。它就像表单中的任何其他输入字段一样,在写入数据库之前总是进行验证。 – nageeb

2

您应该运行两个不同的规则 - 一次为“节能”和一个“更新”。

然后在保存规则,包括用户ID的规则。

在更新规则,不包括用户ID。

把用户ID插入到你的窗体上的“隐藏”字段是不是最优的 - 因为对方能“编辑”页面并更改隐藏字段到别的东西 - 从而开辟了您的应用程序进行操作

+0

好吧,谢谢:D –