0

ここからの続きの質問です

ケース: 非表示フィールドを追加した後、更新できましたが、保存しようとするたびにこのエラーメッセージが表示され続けるため、保存できません:The User ID field is required.

これはコントローラーで、関数 add は Save 用で、 update は 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);
}

そして、これは私の見解です:

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

注: 入力テキストと入力非表示の名前が同じ場合、更新は機能していますが、保存は機能していません。名前が異なる場合、更新は機能していませんが、保存は機能しています @_@

4

2 に答える 2

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']:""?>"/>
于 2012-09-08T10:19:04.823 に答える
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 を編集することで、値を簡単に変更できます。代わりにセッションを解決策として検討することをお勧めします。

于 2012-09-08T10:17:56.567 に答える