2012-02-12 37 views
-1

这里是我的查询,查找使用codeigniter php框架制作的存储在mysql数据库中的用户名和密码。查询数据库选择ID和密码无法正常工作

public function find_user($username,$password) 
{ 
    $sql = "SELECT * 
      FROM users_login 
      WHERE username = ? AND password = ?"; 

    $query = $this->db->query($sql,array($username,md5($password))); 

    if($query->num_rows() == 1) 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 

其中db是:id,username,password。有一些错误,因为它不应该如此工作?

这里是我的控制器。也许错误是在这里:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 


class Login extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->database(); /* This function it's used to connect to database */ 
     $this->load->model('User','user'); /* This call the model to retrieve data from db */ 
    } 


    public function index() 
    { 
     if(!file_exists('application/views/login.php')) 
     { 
      show_404(); 
     } 

     $this->load->helper('form'); 
     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('username','username','trim|required|xss_clean'); 
     $this->form_validation->set_rules('password','password','trim|required|xss_clean|callback_check_pass'); 

     if($this->form_validation->run() == FALSE) 
     { 
      $data['title'] = "User Access"; 
      $this->load->view('login', $data); 
     } 
     else 
     { 
      $data['title'] = " "; 
      $this->load->view('/templates/index',$data);    
     } 
    } 

    public function pass_check($pass) 
    { 
     $username = $this->input->post('username'); 

     $result = $this->user->find_user($username,$pass); 

     if($result) 
     { 
      return TRUE; 
     } 
     else 
     { 
      $this->form_validation->set_message('pass_check','Invalid username or password! Try Again, please!'); 
      return FALSE; 
     } 
    } 
} 
+1

一些事情:**(1)**问题是什么? **(2)**您确定要使用'md5'(已损坏)吗? ['sha1'](http://php.net/manual/en/function.sha1.php)是密码存储的更好选择。 – rdlowrey 2012-02-12 22:28:28

+0

问题是什么? – 2012-02-12 22:28:32

+0

我编辑了这篇文章。我会知道是否有一些错误 – Mazzy 2012-02-12 22:29:34

回答

1

玛兹,首先,记住这一点:

if($query->num_rows() == 1) 
{ 
    return TRUE; 
} 
else 
{ 
    return FALSE; 
} 

可以写为:

return $query->num_rows() == 1; 

我不知道很多关于PHP/CodeIgniter首选语法,但它更紧​​凑(对我来说很舒服)。

现在,试图挖掘你的问题。 $query->num_rows()对于数据库中不存在的特定用户/密码组合返回什么?

如果它匹配的东西(大于0),那么你应该手动检查数据,看看数据库中是否有匹配该用户/密码组合的记录。