form validation error with hidden type code igniter

This is a continue question from here

The case is : after i add a hidden field, now i could Update but i CANT save because everytime i try to save, this error message keep showing up : The User ID field is required.

This is the controller, function add is for Save and update for Update :

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

And this is my view :

<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']:""?>"/>

note : if the name for input text and input hidden is SAME then the update is working but the save is not working, but if the name is different then the update is not working but the save is working @_@

Answers


Just put the hidden input element above the disabled element.

<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']:""?>"/>

The issue appears because the value is overwritten by the hidden input element (which is empty in your "save" page). By moving placing the hidden one before the may or may not be disabled one, both of the "save" and "update" page will work correctly. In the update page, it'll work because if the input is disabled, it will not get sent to the server (i.e. it will not overwrite the hidden one).

However, in my opinion, using a hidden input is not very secure. Users can easily change the value by editing the HTML using tools like Firebug or Chrome developer tools. You might want to look into session as a solution instead.


you shold give different names for input text,input hidden.You given both "ID_user".Try like this

 <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']:""?>"/>

Need Your Help

Cascade insert of new and existing entities

java spring entity-framework hibernate jpa

I have a 'tag' mechanism (kind of like Gmail's labels) with which I want to tag another entity, for the sake of the question - employees.

What would be a better implementation of shared variable among subclass

spring unit-testing inheritance global-variables subclass

So currently I have a spring unit testing application. And it requires me to get a session cookie from a foreign authentication source. Problem what that is, this authentication process is fairly