0

フォームの検証が失敗した場合に、人々を特定のページにリダイレクトしたいと考えています。しかし、私はその方法を完全に理解することはできません。

下の REDIRECT HERE コメントで人々をリダイレクトすると、フォームをロードするときにもリダイレクトされ、無限ループが発生します。

public function create() {

    $this->form_validation->set_rules('email_adress', 'E-mail', 'required|valid_email|is_unique[users.email_adress]');

    if ($this->form_validation->run() !== FALSE) {
        // PASSED
    } 

    else {
        // REDIRECT HERE
    }

    $this->load->view('user_register_view');
}

どうすればこれを達成できますか?

4

1 に答える 1

0

次のようにリダイレクトします。

redirect('insert_URI_here');

または、同じコントローラー内の別のメソッドに渡す場合は、次のようにします。

$this->method_name();

ただし、それをelseステートメントにドロップしただけでは、$this->form_validation->run()は検証エラーまたはフォームの非送信時にfalseを返すため、user_register_viewはロードされません。

あなたがしなければならないことは、検証エラーを探すために別のチェックを追加することです. 検証が失敗し、検証エラーがない場合、フォームは送信されていません。

したがって、次のようなことができます。

public function create() {

    $this->form_validation->set_rules('email_adress', 'E-mail', 'required|valid_email|is_unique[users.email_adress]');
    if(($this->form_validation->run() == FALSE) && ($this->form_validation->error_string() == ''));
        //form not submitted yet
        $this->load->view('user_register_view');
    else if ($this->form_validation->run()) {
        // PASSED
    } else {
        //Validation errors
        redirect('insert_URI_here');
    }
}

あなたはそれをいじる必要があります。$this->form_validation->error_string() は、送信されていない場合は空の文字列を返す必要があると思いますが、null 値または false である可能性があります (頭のてっぺんから覚えていなくてすみません)。

于 2013-01-11T13:26:58.317 に答える