表单提交后设置值

时间:2019-09-08 07:56:25

标签: php codeigniter

我正在使用codeigniter,并具有添加转帐的表格。我已经在控制器中编写了验证规则,但是当提交表单时出现错误消息,但是表单却忘记了用户输入的值。

我尝试使用set_value,它可以工作,但是有时我想制作if语句,我认为它必须在控制器中而不在视图中。有没有一种方法可以在控制器中设置值并将其以$ data的形式返回到视图

  

视图

<?php $type_val= set_value('type');  ?>
<select class="form-control show-tick" id="type" name="type">
    <option value="<?=set_value('type');?>" ><?=($type_val == 1) ? 'Exit' : 'Come';?></option>
    <option value="1">Exit</option>
    <option value="2">COME</option>                         
 </select>
  

控制器

public function add(){

if($this->input->post('submit')){

$rules = $this->get_rules_validation();
$this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $data['title'] = 'Add Transfer';
            $data['view'] = 'admin/transfer/transfer_add';
            $data['validation_error'] = true;
            $this->load->view('layout', $data);
        }
        else{
            $data = array(
                'type' => $this->input->post('type'),

            );
            $data = $this->security->xss_clean($data);
            $result = $this->transfer_model->add_transfer($data);
            if($result){
                $this->session->set_flashdata('msg', 'Transfer is Added Successfully!');
                redirect(base_url('admin/transfer'));                   
            }
            else{
            $this->session->set_flashdata('msg', 'Transfer Cant Be added!');
            redirect(base_url('admin/transfer'));
            }

        }
    }
    else{
        $data['title'] = 'Add Transfer';
        $data['view'] = 'admin/transfer/transfer_add';
        $this->load->view('layout', $data);
    }
}

2 个答案:

答案 0 :(得分:0)

@Samira,控制器中没有set_value这样的方法。但是,您可以检查过帐的值并将其标记为已选择,然后传递$data,但是您必须再次检查该值以在视图中将选项显示为选择项,这是没有意义的。

您应该使用set_select而不是set_value

例如

<select class="form-control show-tick" id="type" name="type">
  <option value="1" <?php echo  set_select('type', '1'); ?>>Exit</option>
  <option value="2" <?php echo  set_select('type', '2'); ?>>COME</option>                         
</select>

您可以在此处查看完整的文档。 Set select codeigniter

还有一件事情,您不需要两次加载视图。您只能加载一次。

$this->form_validation->run()仅在提交表单后执行。

答案 1 :(得分:0)

我已将验证放入函数中

public function get_rules_validation(){
    $rules = array(
        array(
                'field' => 'type',
                'label' => 'Type',
                'rules' => 'is_natural_no_zero',
                'errors' => array(
                    'is_natural_no_zero' => 'You must provide a %s.',
                ),              
        );
       return $rules;
       }    

添加

public function add(){

if($this->input->post('submit')){

$rules = $this->get_rules_validation();
$this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $data['title'] = 'Add Transfer';
            $data['view'] = 'admin/transfer/transfer_add';
            $data['validation_error'] = true;
            $this->load->view('layout', $data);
        }
        else{
            $data = array(

                'created_at' => date('Y-m-d : h:m:s'),
            );
            $data = $this->security->xss_clean($data);
            $result = $this->transfer_model->add_transfer($data);
            if($result){
                $this->session->set_flashdata('msg', 'Transfer is Added Successfully!');
                redirect(base_url('admin/transfer'));                   
            }
            else{
            $this->session->set_flashdata('msg', 'Transfer Cant Be added!');
            redirect(base_url('admin/transfer'));
            }

        }
    }
    else{
        $data['title'] = 'Add Transfer';
        $data['view'] = 'admin/transfer/transfer_add';
        $this->load->view('layout', $data);
    }
}