我已经检查并重新检查了我的代码,引用了整个网络上的CI文档和其他帖子,但是我没有成功实现set_value()方法,以便在验证失败后重新填充表单字段。 也许我遗漏了CI框架的一些非常重要的东西(我对它很新),但是你的见解会非常受欢迎。
我的控制器方法中有以下内容:
public function form_step2(){
//Form Setup
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
$data['title'] = $this->base_title;
$data['base_url'] = base_url();
//Validation Settings - must be set per step
$this->form_validation->set_rules('request_type', 'Request Type', 'required');
*...more of the same set_rules()*
if ($this->form_validation->run() === FALSE) {
### Validation failed or New Form
// Get form element data
$data['request_types'] = $this->my_model->get_form_data('request_type');
*...more of the same get_form_data() calls for loading form elements*
//Generate Page from View Templates
$this->load->view('templates/header', $data);
$this->load->view('templates/form_step2', $data);
$this->load->view('templates/footer');
} else {
### Save to database
$this->my_model->set_data($data);
redirect('my_model/success','refresh');
}
}
在我看来,这段代码片段没有重新填充:
<?php echo form_open('my_model/form_step2', array('class'=>'form-inline')); ?>
<label for="fname">First Name</label>
<input type="text" id="fname" name="fname" value="<?php echo set_value('fname'); ?>" />
<input type="submit" name="submit" value="Submit" />
我无法想出这一点,所以提前感谢你的帮助。
答案 0 :(得分:13)
如果您想使用set_data()
,您还需要将set_rules
用于该POST / GET字段。
由于您已经注释掉了所有的set_rules,我无法确认这是问题,但很有可能确实存在。
请检查您的代码中是否包含此行
$this->form_validation->set_rules('fname', 'First name', 'trim|required');
因此,如果您想使用name="fname"
重新填充字段,则需要set_rules() // as line above
,否则将无法处理,因此set_value('fname')
为空。
答案 1 :(得分:1)
你肯定找到了解决办法,但对于像我这样花费太多时间来解决这个问题的人。 我找到了解决方案:
所以改为编码
<input type="text" id="fname" name="fname" value="<?php echo set_value('fname'); ?>" />
试试这个,它运行得很好:
<?php $data = array('id' =>fnam, 'name'=> 'fname','value'=> set_value('fname'), 'size =>'50');
echo form_input($data).'<br />'; ?>
答案 2 :(得分:0)
试试这种方式。它将获得验证错误和设置值
在视图中
<?php echo flash_message();
if($this->session->userdata('postinput') !=""){
$value = $this->session->userdata('postinput');
$this->session->unset_userdata('postinput');
}else
$value = "";
?>
<form action="<?php echo site_url('carlisting/carlist');?>" method="post" id="your_reg_form">
<div class="reg-search">
<input placeholder="YOUR REG" name="input" type="text" value="<?php echo $value; ?>">
</div>
在控制器中
$this->form_validation->set_rules('input', 'Registration', 'required|min_length[2]|max_length[7]');
if ($this->form_validation->run() == false){
$this->session->set_flashdata( 'message', array('content' => validation_errors(), 'type' => 'error_message_small' ));
$this->session->set_userdata('postinput',$this->input->post('input'));
redirect('home');
}
答案 3 :(得分:-4)
允许您设置输入表单或textarea的值。您必须通过函数的第一个参数提供字段名称。第二个(可选)参数允许您为表单设置默认值。示例:
<input type="text" name="quantity" value="<?php echo set_value('quantity', '0'); ?>" size="50" />
第一次加载时,上面的表格会显示“0”。