Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Codeigniter中验证表单后出现未定义变量错误_Codeigniter_Validation - Fatal编程技术网

在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);
}