3

私はCodeIgniterを初めて使用し、単純なCRUDアプリでフォームを送信した後、フォームの値を再入力するのに本当に苦労しています(エラーと成功の両方で)。ここにコードを投稿すると役立つかもしれないと思ったので、誰かが助けてくれるかもしれません。

これが私のコントローラーからのものです:

function update($id){

        $seller = $this->seller_model->get_seller_byID($id)->row();
        $data['seller'] = $seller;

        $data['title'] = 'Update seller';
        $data['message'] = '';
        $data['action'] = site_url('seller/updateSeller');
        $data['link_back'] = anchor('seller/ManageSellers/','Back to list of sellers',array('class'=>'back'));

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

    function updateSeller(){

        $data['title'] = 'Update seller';
        $data['action'] = site_url('seller/updateSeller');
        $data['link_back'] = anchor('seller/ManageSellers/','Back to list of sellers',array('class'=>'back'));

        $this->setValidation();

        if ($this->form_validation->run() == FALSE)
        {
        $data['message'] = 'fail';
        }
        else
        {
            $id = $this->input->post('id');

            $seller = array('s_fname' => $this->input->post('fname'),
                            's_lname' => $this->input->post('lname'),
                            's_email' => $this->input->post('email'),
                            's_password' => $this->input->post('pword'));

            $this->seller_model->update_seller($id,$seller);

            $data['message'] = '<div class="success">update seller success</div>';
        }   
        $this->load->view('EditSeller', $data);
    }

    function setValidation()
    {
        $this->form_validation->set_rules('fname', 'First Name', 'required');
        $this->form_validation->set_rules('lname', 'Last Name', 'required');
        $this->form_validation->set_rules('email', 'Email', 'required');
        $this->form_validation->set_rules('pword', 'Password', 'required');
        $this->form_validation->set_rules('status', 'Status', 'required');
        $this->form_validation->set_rules('dealer', 'Dealer', 'required');
    }   

ここに私の見解があります:

    <html>
<head>

</head>
<body>
        <h2><?php echo $title; ?></h2>

        <?php echo $message; ?>

        <?php echo validation_errors(); ?>

    <div class="content">
        <form method="post" action="<?php echo $action; ?>">
        <div class="data">           

                <p><?php
                    if (isset($seller->s_id))
                    {
                        echo "Id: " . $seller->s_id;
                        echo form_hidden("id", isset($seller->s_id) ? $seller->s_id : '' );
                    }
                ?></p>

                <p>First Name: 
                    <?php 
                        $field = array(  'name' => 'fname', 
                                         'size' => 30, 
                                         'class'=>'input', 
                                         'value' => (isset($seller->s_fname) ? $seller->s_fname : '' ) );
                        echo form_input($field, set_value('fname')); 
                    ?>
                </p>

                <p>Last Name: 
                    <?php 
                        $field = array(  'name' => 'lname', 
                                         'size' => 40, 
                                         'class'=>'input', 
                                         'value' => (isset($seller->s_lname) ? $seller->s_lname : '' ) );
                        echo form_input($field, set_value('lname')); 
                    ?>
                </p>

                <p>Email: 
                    <?php 
                        $field = array(  'name' => 'email', 
                                         'size' => 60, 
                                         'class'=>'input', 
                                         'value' => (isset($seller->s_email) ? $seller->s_email : '' ) );
                        echo form_input($field, set_value('email')); 
                    ?>
                </p>

                <p>Password: 
                    <?php 
                        $field = array(  'name' => 'pword', 
                                         'size' => 20, 
                                         'class'=>'input', 
                                         'value' => (isset($seller->s_password) ? $seller->s_password : '' ) );
                        echo form_password($field, set_value('pword')); 
                    ?>
                </p>

                <p>Status: 
                    <select name="status">
                        <option value="1" <?php echo set_select('status', '1', TRUE); ?>>Verified</option>
                        <option value="2" <?php echo set_select('status', '2'); ?>>Not verified</option>
                    </select>
                </p>

                <p>Dealer:
                    <input type="radio" name="dealer" value="Y" <?php echo set_radio('dealer', '1', TRUE); ?>/> Yes
                <input type="radio" name="dealer" value="N" <?php echo set_radio('dealer', '2'); ?>/> No
                </p>

                <p><?php
                    if (isset($seller->s_startdate))
                    {
                        echo "Start Date: " . $seller->s_startdate;
                    }
                ?></p>

           <input type="submit" value="Save"/>

               <p><?php echo $link_back; ?></p>

        </div>
        </form>
        <br />
    </div>
</body>
</html>

検証が成功すると、データベースに適切に保存されますが、ページをリロードするとテキスト ボックスに値が入力されません。検証エラーが発生すると、データベースは期待どおりに変更されませんが、値はフォーム フィールドに保持されません。

4

2 に答える 2

2

変化する

  $field = array(  'name' => 'fname', 
        'size' => 30, 
        'class'=>'input', 
        'value' => (isset($seller->s_fname) ? $seller->s_fname : '' ) );
  echo form_input($field, set_value('fname')); 

  $field = array(  'name' => 'fname', 
        'size' => 30, 
        'class'=>'input', 
        'value' => set_value('s_fname', (isset($seller->s_fname) ? $seller->s_fname : '' )) );
  echo form_input($field); 

(そして、他のすべての同様の出来事についても同じことをします。

set_valueとフォームの再入力について詳しくは、こちらをご覧ください。

于 2012-09-22T04:09:59.633 に答える
1

問題は、updateSeller() が完了したときに、$data['seller'] 情報をビューに送り返していないことです。

以下は、再加工された updateSeller() 関数です。

function updateSeller(){

    $data['title'] = 'Update seller';
    $data['action'] = site_url('seller/updateSeller');
    $data['link_back'] = anchor('seller/ManageSellers/','Back to list of sellers',array('class'=>'back'));
    $data['seller'] = array();

    $this->setValidation();

    if ($this->form_validation->run() == FALSE)
    {
        $data['message'] = 'fail';
    }
    else
    {
        $id = $this->input->post('id');

        $seller = array('s_fname' => $this->input->post('fname'),
                        's_lname' => $this->input->post('lname'),
                        's_email' => $this->input->post('email'),
                        's_password' => $this->input->post('pword'));

        $data['seller'] = $seller; // send form data back to view

        $this->seller_model->update_seller($id,$seller);

        $data['message'] = '<div class="success">update seller success</div>';
    }   
    $this->load->view('EditSeller', $data);
}
于 2012-09-22T20:10:55.823 に答える