2012-03-06 24 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()メソッドでは、$JNresultsがビューに表示されないように、$data['JNresults']=$JNresults->result();を使用していません。

ソリューション:

検証load_view()のフォーム、およびvalidate()方法の取り除く:form_open()またはにform_open('status/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); 
} 

を。

$data['error']を使用していないようですが、必要ないので問題ありません。 2番目のコントローラ機能で

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

ありがとうMadmartigan。私はあなたがビューをロードしてフォームを検証する必要があるとき、これがベストプラクティスだと思いますか? – FlyingCat

+1

Codeigniterで自分の足元を見つけている間に私が提案していることですが、ベストプラクティスとは思えないものがあります。時には真の[Post/Redirect/Get](http://en.wikipedia。 org/wiki/Post/Redirect/Get)パターンを使用します。それは本当に依存しています。フォームの処理後に 'redirect()'を実行するようにしてください。 –

+0

が分かります。ありがとう。 – FlyingCat

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

関連する問題