0

我有一个登录表单,我正在做两部分验证:客户端和服务器端。客户端:检查电子邮件是否有效,检查密码是否至少为 6 个字符等。如果客户端出现问题,我可以在与登录表单相同的页面上向用户显示错误消息,因为该页面从未得到重新加载,因为如果客户端验证不正确,它不会向服务器发送帖子。

但是如果它是真的,那么我正在做一个服务器端验证 - > 检查电子邮件和密码是否匹配以有效地登录到网站。但如果登录凭据不匹配,我需要显示错误消息。这是我卡住的部分。我在哪里以及如何在同一页面(登录表单)上收到消息,因为页面被发布和刷新,所以我丢失了数据。现在,当凭据不正确时,我将用户重定向回登录页面,但没有任何消息。但我正在努力实现他会看到“凭证不正确”的消息。有人可以帮我弄这个吗?

登录视图

<?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

我更喜欢在一个控制器中做,它会更清楚。我举一个简单的例子,只是告诉你我认为的方式是好的。

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

我已经像这样解决了这个问题:基本上当模型发送错误时。我在其中制作带有消息的 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 回答