0

クライアント側とサーバー側の2つの部分の検証を行っているログインフォームがあります。クライアント側: 有効な電子メールかどうか、パスワードが最小 6 文字かどうかなどを確認します。クライアント側で問題が発生した場合は、ログイン フォームと同じページにエラー メッセージを表示できます。クライアント側の検証が真でない場合、サーバーにポストを送信しないため、リロードされます。

しかし、それが本当の場合、サーバー側の検証を行っています->電子メールとパスワードが一致してWebサイトに効果的にログインするかどうかを確認します. しかし、ログイン資格情報が一致しない場合は、エラー メッセージを表示する必要があります。これは私が立ち往生している部分です。ページが投稿および更新されてデータが失われるため、同じページ (ログインフォーム) でメッセージを受け取る場所と方法を教えてください。資格情報が正しくない場合、ユーザーをログインページにリダイレクトしますが、メッセージは表示されません。しかし、「資格情報が正しくありません」というメッセージが表示されるようにしようとしています。誰かがこれで私を助けることができますか?

ログインビュー

<?php

    $loginEmail = array('placeholder' => "Email", 'name' => "loginEmail");
    $loginPassword = array('placeholder' => "Wachtwoord", 'name' => "loginPassword");
    $loginSubmit = array('name' => "loginSubmit", 'class' => "btn", 'value' => "Inloggen");

    echo form_open('login/inloggen', array('class' => 'grid-100 formc'));
    echo form_input($loginEmail, set_value('loginEmail'));
    echo form_password($loginPassword);
    echo form_submit($loginSubmit);
    echo form_close();
?>

ログイン コントローラ

 function index(){
        $logged_in =  $this->logged_in->is_logged_in();

        if($logged_in){
            $this->load->view('profile_view'); 
        }
        else{
            $data['content'] = 'login_view';
            $this->load->view('templates/template', $data);
        }       
  } 

  function inloggen(){

        if($this->input->post('loginSubmit')){
            if($this->form_validation->run('login_validation_rules') == FALSE){
                $this->index();
            }
            else{
                $this->load->model('login_model');
                $query = $this->login_model->validate();


                if($query){
                    $data = array(
                        'username' => $this->input->post('loginEmail'),
                        'is_logged_in' => true
                        );

                        $this->session->set_userdata($data);
                        redirect('profile');
                }
                else{
                    $this->index();// If credentials aren't correct, redirect them to login page. But how I set a message here?
                }
             }
        }       
   }

ログインモデル

function validate(){

    $this->db->where('email', $this->input->post('loginEmail'));
    $this->db->where('password', md5($this->input->post('loginPassword')));

    $query = $this->db->get('tbl_users');

    if($query->num_rows == 1){
        return true;
    }
    else{
        return false;
    }

}
4

2 に答える 2

1

私は 1 つのコントローラーで行うことを好み、より明確になります。私がどのように良いと思うかを伝えるために、簡単な例を 1 つ挙げます。

function login(){

        $data['error_message']  = "";
        $data['username']       = $this->input->post('username');
        $data['password']       = $this->input->post('password');

        if($this->input->post('loginSubmit')){

            // Make rules of validation that need to be required

            if($this->form_validation->run('login_validation_rules')){ // If true it goes IN

                $this->load->model('login_model');
                $query = $this->login_model->validate();

                if($query){
                    $data = array(
                        'username' => $this->input->post('loginEmail'),
                        'is_logged_in' => true
                        );

                        $this->session->set_userdata($data);
                        redirect('profile'); // Go IN profile

                } else {
                    $data['error_message'] = "Something went wrong"; // This error you write on View
                }

            }

        }

        $this->load->view('login_view', $data) //Load view of login
}

私はテストしていません。データに適応させる必要がありますが、その方法を説明したいだけです。問題がある場合は、コメントを書いてください。一緒に解決策を見つけます。

于 2013-07-18T22:04:38.297 に答える
0

私はこの問題を次のように解決しました: 基本的に、モデルが false を送信したとき。メッセージを含む var を作成し、インデックスでその var が存在するかどうかを確認します。私が知りたい唯一のことは、コントローラーにメッセージを設定しても大丈夫ですか、それとも他の場所でそれを行うべきだったのでしょうか??

function index(){
            $logged_in =  $this->logged_in->is_logged_in();

            if($logged_in){
                $this->load->view('profile_view'); 
            }
            else{
                //Check here if my redirection submitted also a message
                if(isset($this->ongeldig)){
                    $data['ongeldig'] = $this->ongeldig;
                } 
                else{
                    $data['ongeldig'] = '';
                }

                $data['content'] = 'login_view';
                $this->load->view('templates/template', $data);
            }       
        }   

        function inloggen(){

            if($this->input->post('loginSubmit')){
                if($this->form_validation->run('login_validation_rules')){

                    $this->load->model('login_model');


                    $query = $this->login_model->validate();        

                    if($query){
                        $data = array(
                            'username' => $this->input->post('loginEmail'),
                            'is_logged_in' => true
                        );

                        $this->session->set_userdata($data);
                        redirect('profile');
                    }
                    else{// set a error message, when the models function returns false.
                        $this->ongeldig = "Ongeldig wachtwoord/gebruikersnaam";
                        $this->index();

                    }
                }
                else{
                    $this->index();
                }
            }       
        }
于 2013-07-20T10:34:54.487 に答える