在Codeigniter中验证表单后出现未定义变量错误
在用户提交表单后,我尝试对表单使用表单验证。我的视图页面有一个由我的控制器传递的变量。在我提交表单进行验证之前,查看页面工作正常。它给了我错误,说控制器传递的变量未定义。我不知道如何解决这个问题。有什么想法吗在Codeigniter中验证表单后出现未定义变量错误,codeigniter,validation,Codeigniter,Validation,在用户提交表单后,我尝试对表单使用表单验证。我的视图页面有一个由我的控制器传递的变量。在我提交表单进行验证之前,查看页面工作正常。它给了我错误,说控制器传递的变量未定义。我不知道如何解决这个问题。有什么想法吗 // Controller - status.php public function load_view () { $this->load->model('project_query'); $JNresults=$this->project_query-&
// 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);
}
提交表单后,我会得到未定义的变量$jnsults
。我知道查看页面无法识别它,因为它是从控制器传递的。我只是想知道是否有人能帮我解决这个问题。在您的validate()
方法中,您没有使用$data['JNresults']=$JNresults->result()
因此变量$JNresults
永远不会在视图中填充
解决方案:
在load\u 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);
}
然后将表单打开('status/validate')
更改为表单打开()
或表单打开('status/load\u view')
看起来您没有使用$data['error']
,这很好,因为您不需要它validation\u error()
如果没有错误,则返回一个空字符串,因此如果要添加额外消息,只需检查它是否为空:
if ($errors = validation_errors())
{
echo 'There were errors:';
echo $errors;
}
在第二个控制器函数中,如果没有加载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);
}
另外,您没有在该函数中调用post数据的验证。谢谢Madmartigan。我假设当您需要加载视图并验证表单时,这是最佳实践?这是我建议您在Codeigniter中站稳脚跟时所做的,我仍然不确定我认为最佳实践是什么,有时我尝试实现真正的模式。这要看情况,真的。处理表单后,只需确保
redirect()
。
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);
}