在Codeigniter中验证表单后未定义的变量错误

时间:2012-03-06 16:53:34

标签: codeigniter validation

我尝试在用户提交表单后使用表单验证。我的视图页面有一个由我的控制器传递的变量。视图页面正常工作,直到我提交表单进行验证。它给了我错误,说控制器传递的变量是未定义的。我不知道如何解决这个问题。有什么想法吗?

// 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。我理解视图页面无法识别它,因为它是从控制器传递的。我只是想知道是否有人可以帮我解决这个问题。

2 个答案:

答案 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);
}

此外,您还没有调用该函数中的帖子数据验证。