2013-07-18 55 views
0

我有一個登錄表單,我正在做2部分驗證:客戶端和服務器端。 客戶端:檢查是否有效的電子郵件,檢查密碼是最少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; 
    } 

} 

回答

1

我會更喜歡d o在一個控制器中,它會更清晰。我舉一個簡單的例子,只是爲了告訴你我認爲如何的好方法。

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 
} 

我沒有測試,它需要適應你的數據,但我只是想解釋一下。您有任何問題,請寫評論,我們會一起找到解決方案。

+0

我沒有完全使用你的方法,但我確實幫了我很多努力,以我的方式實現它。我會按照我的方式發佈答案。但我不明白爲什麼你有'$ data ['username']'和'$ data ['password']''。你能向我解釋一下嗎? – mXX

+0

是的,我寫在開頭。當您登錄時,密碼和用戶名將爲空。提交後,你進入相同的控制器,並獲得密碼和用戶名與帖子(現在不是空白),並將其用於檢查並放入會話中。 但是,如果用戶沒有寫出正確的用戶名,那麼這些$ data(用戶名和密碼)將會在login_view中載入,並顯示出來。 我不知道我是否清楚解釋,但主要原因是更乾淨,少代碼。 (一個控制器方法,一個視圖和良好的用戶體驗) –

+0

我想我明白了,但是在會話中存儲用戶名和密碼不是不安全的,因爲CI使用cookie作爲會話嗎? – mXX

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(); 
       } 
      }  
     }