2013-07-17 79 views
0

我想學習MVC和codeigniter,並試圖找出我做錯了什麼。我試圖用包含電子郵件和密碼的非常簡單的表單登錄。 在控制器中,我首先加載包含表單的視圖。當所有內容都被填入並點擊'loginSubmit'按鈕時,它應該在我的控制器中進入'login()'。Codeigniter - 不登錄

在我的方法'登錄()'我加載模型,在那裏我稱之爲'驗證()'方法。當它返回一個我返回一個真正的我的控制器來啓動會話並將我重定向到配置文件頁面。

現在的問題是,無論我給在登錄中,它總是刷新,登錄梅索德

所以我瀏覽到

http://localhost/project/index.php/login/ 

登錄控制器時,按提交時帶給我到

http://localhost/project/index.php/login/login/ 

爲什麼不做任何檢查,發生了什麼?

login_view

<?php 
    $loginEmail = array('placeholder' => "Email", 'name' => "loginEmail"); 
    $loginPassword = array('placeholder' => "Wachtwoord", 'name' => "loginPassword"); 
    $loginSubmit = array('name' => "loginSubmit", 'class' => "btn", 'value' => "Inloggen"); 
    $loginForgot = array('name' => "loginForgot", 'class' => "link", 'value' => "Wachtwoord vergeten?"); 

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

login_controller

<?php 

    Class Login extends CI_Controller{ 
     public function __construct() {   
      parent::__construct(); 
     } 

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


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

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

       ); 

       $this->session->set_userdata($data); 
       redirect('profile/myprofile'); 
      } 
      else{ 
       echo "not logged in"; 
      } 
     } 

    } 

    ?> 

login_model莫

<?php 

    Class Login_model extends CI_Model{ 
     function __construct(){ 
      parent::__construct(); 
     } 
     function validate(){ 
      $this->db->where('email', $this->input->post('loginEmail')); 
      $this->db->where('password', md5($this->input->post('loginPassword'))); 
      // I also tried with get_where, but same effect. BTW. what is the difference between where() and get_where() and what is better? 
      //$query = $this->db->get_where('tbl_users', array(('email', $this->input->post('loginEmail'), ('password', $this->input->post('loginPassword'))); 
      $query = $this->db->get('tbl_users'); 

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

    } 

    ?> 
+0

你確定你只有一行嗎? 「$ query-> num_rows == 1」如果「$ query-> num_rows> 0」會怎麼樣? – martincpt

+0

我有2記錄在數據庫和完全不同的記錄。也不可能用同一封電子郵件註冊,所以它總是必須是1或0 – mXX

+0

然後我會試着'echo $ this-> input-> post('loginEmail')。''.md5($ this- > input-> post('loginPassword'));'在你的validate函數中。看看他們是否在數據庫中相同。 – martincpt

回答

1

請更改功能namefrom登錄到別的東西(在控制器)當我們創建具有相同的類名的功能就變得構造函數。這就是爲什麼登錄功能一次又一次地加載。

+0

它總是執行'else {else { echo「not logged in」; }'即使憑證是正確的 – mXX

+0

是的我知道,因爲登錄函數是作爲構造函數執行的。所以請更改函數的名稱。如果它不起作用,請嘗試調試您的代碼,例如echo $ query;死(); –

+0

是的,我現在改變了函數的名稱:'inloggen()' 但現在當我登錄時,它說基本上是說憑據不正確 – mXX

0

寫else部分德爾與form_close()方法總是密切形式

<?php 

     Class Login_model extends CI_Model{ 

      function validate(){ 
       $this->db->where('email', $this->input->post('loginEmail')); 
       $this->db->where('password', md5($this->input->post('loginPassword'))); 
       // I also tried with get_where, but same effect. BTW. what is the difference between where() and get_where() and what is better? 
       //$query = $this->db->get_where('tbl_users', array(('email', $this->input->post('loginEmail'), ('password', $this->input->post('loginPassword'))); 
       $query = $this->db->get('tbl_users'); 

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

這沒有奏效。它仍然是相同的結果 – mXX