-1

CIフォーム検証を使用しているログインフォームがあります。

フォームはdomain.com/loginにあります

これはvalidate_credentialsという関数を実行し、検証が失敗した場合はビューをリロードします。問題は、URLが引き続き表示されることです。

domain.com/login/validate_credentials

/ validate_credentialsを削除するにはどうすればよいですか?

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login extends CI_Controller {

    public function index()
    {
    $this->load->library('form_validation');

    $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'required');

    $this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('login/login');
    }
    else
    {
        $this->load->view('clock/clock');
    }

}

function validate_credentials() {
    $this->load->model('membership_model');
    $query = $this->membership_model->validate();

    if($query) {// staff credentials validated...
        $data = array(
                'email' => $this->input->post('email'),
                'staff_logged_in' => TRUE
            );

            $this->session->set_userdata($data);
            redirect('clock/clock');
    }

    else {  // not validated reload index function
        $this->index();
    }
}

}
4

1 に答える 1

1

他のコントローラー関数を呼び出す代わりに、インデックスへのリダイレクトを実行します。CodeIgniterのコントローラーの関数はURLスキームを設定しているため、現在の方法はインデックス関数を実行するだけですが、validate_credentials関数(およびURL)内にあります。

このようにしてください:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login extends CI_Controller {

    public function index()
    {
    $this->load->library('form_validation');

    $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'required');

    $this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('login/login');
    }
    else
    {
        $this->load->view('clock/clock');
    }

}

function validate_credentials() {
    $this->load->model('membership_model');
    $query = $this->membership_model->validate();

    if($query) {// staff credentials validated...
        $data = array(
                'email' => $this->input->post('email'),
                'staff_logged_in' => TRUE
            );

            $this->session->set_userdata($data);
            redirect('clock/clock');
    }

    else {  // not validated reload index function
        //$this->index();
        $this->load->helper('url'); //to enable redirect function
        redirect('index'); //based on your index url
    }
}

}

エラーまたは成功メッセージを表示する必要がある場合は、CodeIgniterのセッションライブラリのflash_messageを参照してください。ただし、ここに例を示します。

インデックスにリダイレクトする直前に、コントローラにエラーメッセージを設定します。

$this->load->library('session');
$this->session->set_flashdata('error_message', "This is my error message");

また、インデックスビューでは、存在する場合はそれを表示します。

<?if($this->session->flashdata('error_message')):?>
    <div class="nNote nFailure"><p><?=$this->session->flashdata('error_message');?></p></div>
<?endif;?>

flash_messageが1回表示されることに注意してください。つまり、インデックスにエラーが表示され、セッションメッセージが破棄されます。これは、エラーメッセージを正しく簡単に表示するためのflash_messageの目的です。

于 2012-11-07T15:59:13.460 に答える