2012-01-24 99 views
1

我試圖建立一個用戶登錄。在Codeigniter中爲用戶登錄比較查詢中的md5密碼

它之外的所有MD5密碼完美的工作。

基本上我有一個形式,它確實驗證(爲有效的電子郵件,以及所需的字段),然後我做了一個自定義的回調驗證規則來比較在形式與數據庫中輸入的用戶的詳細信息。如果沒有發現的細節,規則返回FALSE,如果他們被發現時,用戶將登錄

下面是在我的控制器的檢查規則的功能:

public function user_pass_check() 
    { 
     $db_users = $this->load->database('users', TRUE); 
     $post_email = $this->input->post('email', TRUE); 
     $post_password = $this->input->post('password', TRUE); 

     $query = $db_users->query("SELECT id, email, password FROM useraccounts WHERE `email`='$post_email' AND `password`=md5('$post_password')"); 
     $result = $query->num_rows(); 

     if ($result == 0) 
     { 
      $this->form_validation->set_message('user_pass_check', 'Login failed! Please check your login details.'); 
      return FALSE; 
     } 
     else 
     { 
      // Session cookie creation goes here // 
      return TRUE; 
     } 
    } 

我剛剛得到一個錯誤當我嘗試登錄時,如果數據庫中的密碼不是md5,並且我在查詢中的$ post_password周圍刪除了md5(),則它可以正常工作。天生我想密碼是MD5,我不能在我的數據庫中暴露密碼。

而且這裏的表單驗證規則:

$this->form_validation->set_rules('email', 'email address', 'trim|required|valid_email|callback_user_pass_check'); 
$this->form_validation->set_rules('password', 'password', 'trim|required|md5|callback_user_pass_check'); 

任何想法?

+0

是你的密碼在數據庫中保存爲md5 ..? –

+0

是的,這是一個MD5密碼。 –

+2

'$ post_password = MD5($這個 - >輸入 - >後( '密碼',TRUE));'應該這樣做,我認爲(和從查詢中刪除MD5) – danneth

回答

1
$post_password = md5($this->input->post('password', TRUE)); 

完成這項工作。

相關問題