我尝试在用户提交表单后使用表单验证。我的视图页面有一个由我的控制器传递的变量。视图页面正常工作,直到我提交表单进行验证。它给了我错误,说控制器传递的变量是未定义的。我不知道如何解决这个问题。有什么想法吗?
// Controller - status.php
public function load_view ()
{
$this->load->model('project_query');
$JNresults=$this->project_query->get_jobnumber();
$data['JNresults']=$JNresults->result(); //pass to view
$data['view']='form_view';
$this->load->view('include/template',$data);
}
public function validate ()
{
//validate form
$data['error']='There are errors in your form.';
$data['view']='form_view';
$this->load->view('include/template',$data);
}
// View page - form_view.php
foreach ($JNresults as $row): //work fine when first loaded.
echo $row->job_number;
endforeach;
echo form_open('status/validate');
echo validation_errors();
// input fields...
echo form_submit($submit);
echo form_close();
提交表单后,我得到未定义的变量$JNresults
。我理解视图页面无法识别它,因为它是从控制器传递的。我只是想知道是否有人可以帮我解决这个问题。
答案 0 :(得分:1)
在validate()
方法中,您没有使用$data['JNresults']=$JNresults->result();
,因此您的视图中永远不会填充变量$JNresults
。
解决方案:
在load_view()
中验证表单,并取消validate()
方法:
public function load_view()
{
// set validation rules
if ($this->form_validation->run())
{
// do something
}
$this->load->model('project_query');
$JNresults=$this->project_query->get_jobnumber();
$data['JNresults']=$JNresults->result(); //pass to view
$data['view']='form_view';
$this->load->view('include/template', $data);
}
然后将form_open('status/validate')
更改为form_open()
或form_open('status/load_view')
。
看起来你没有使用$data['error']
,这很好,因为你不需要它。如果没有错误,validation_error()
会返回一个空字符串,所以如果你想添加一条额外的消息,你可以检查它是否为空:
if ($errors = validation_errors())
{
echo 'There were errors:';
echo $errors;
}
答案 1 :(得分:1)
在第二个控制器功能中,您没有加载JNresults变量,您必须添加:
public function validate ()
{
//validate form
$JNresults=$this->project_query->get_jobnumber();
$data['JNresults']=$JNresults->result(); //pass to view
$data['error']='There are errors in your form.';
$data['view']='form_view';
$this->load->view('include/template',$data);
}
此外,您还没有调用该函数中的帖子数据验证。