1

ユーザー名とパスワードを使用した簡単なログイン ページ (index.php) があります。データベース関連のすべての関数を含む db_connect.php というファイルを作成しました。

class Database{

    private $connection;
    private $db;

    function __construct()
    {

        $this->connection = mysql_connect('localhost','root','') or die("cannot connect");  
        $this->db = mysql_select_db('logistics',$this->connection);
    }

    function verify_login($uid,$password)
    {
        $verify_login = "select user_id from log_users where user_login = '$uid' and user_password = '$password'";                  
        $status = mysql_query($verify_login,$this->connection);
        while($result = mysql_fetch_assoc($status)){
        if($result['user_id'] == '1')
            {
                return true;
            }
            else{
                return false;
            }
    }
}

これで、関数 verify_login($username,$password) を呼び出すために使用されるクラス データベースのオブジェクトが作成されました。ここでの問題は、ログインのステータスに関係なく、出力が空白のページになることです。変数 $status を出力すると、リソース ID が返されます。しかし、何も返されません。

4

1 に答える 1

0

すごい:)SQLインジェクション...いいえ、私はしていません

or die("cannot connect"); 

例外を使用し、ブロックを試行/キャッチします

$verify_login = "select user_id from log_users where user_login = '$uid' and user_password = '$password'";

ああ。なぜuid?uidは整数値または文字列ですか?文字列名変数行u_loginまたはIDのない他の何かの場合。ただし、整数の場合は、$ uidの近くで(int)を使用して、整数型の入力データを取得します。$ user_passrordをクリーンアップする必要があります:mysql_real_escapingは私たちを助けます

$verify_login = "select user_id from log_users where user_login = '$uid' and user_password = 'mysql_real_escape_string($password)'";

よりも:

if(!empty($result)) {
    return true; // auth
}else{
    return false; // error auth
}

some_file.php:

// include your code

if(verify_login($login, $password)) {
    echo 'Auth!';
}
于 2012-12-16T13:59:38.107 に答える