2012-03-06 136 views
0

我想在用戶提交表單後使用表單驗證。我的視圖頁面有一個由我的控制器傳遞的變量。查看頁面正常工作,直到我提交表單進行驗證。它給了我錯誤,說控制器傳遞的變量是未定義的。我不知道如何解決這個問題。有什麼想法嗎?在Codeigniter中驗證表單後未定義的變量錯誤

// 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我提交表單後。我明白視圖頁面無法識別它,因爲它是從控制器傳遞來的。我只想知道是否有人能幫我解決這個問題。

回答

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()或。

看起來你不使用$data['error'],這很好,因爲你不需要它。

if ($errors = validation_errors()) 
{ 
    echo 'There were errors:'; 
    echo $errors; 
} 
+0

謝謝Madmartigan。當您需要加載視圖並驗證表單時,我認爲這是最佳實踐? – FlyingCat 2012-03-06 17:39:27

+1

這就是我在Codeigniter中發現自己的腳時所做的事,我仍然不確定我認爲最佳實踐是什麼,有時我試圖實現真正的[Post/Redirect/Get](http://en.wikipedia)。 org/wiki/Post/Redirect/Get)模式。這取決於,真的。處理表單後請確保'重定向()'。 – 2012-03-06 17:47:51

+0

瞭解。謝謝。 – FlyingCat 2012-03-06 18:45:44

1

在你的第二個控制器的功能,你不加載JNresults變量,你必須:如果沒有錯誤,所以如果你想添加一個額外的消息,你可以檢查它是否是空的validation_error()返回一個空字符串要添加:

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

另外,您並未調用該函數中的發佈數據驗證。

+0

感謝您的幫助。 +1 – FlyingCat 2012-03-06 18:45:12