2012-02-12 9 views
-1

ここでは、codeigniter PHPフレームワークを使用して作成したmysql dbに格納されているユーザー名とパスワードを検索するクエリです。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

+0

何が問題なのですか? –

+0

投稿を編集しました。 – Mazzy

答えて

1

Mazzyは、まず、このことを覚えている:

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

は、以下のように書くことができる

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

私はPHPについて多くを知りません/ CodeIgniterの好ましい構文ですが、もっとコンパクトです(私にとっては快適です)。

今、あなたの問題を掘り下げようとしています。 $query->num_rows()は、DBに存在しない特定のユーザー/パスワードの組み合わせに対して何を返しますか?

何か(0より大きい)と一致する場合は、手動でデータをチェックし、そのユーザー/パスワードの組み合わせに一致するレコードがDBにあるかどうかを確認する必要があります。

関連する問題