0

問題は解決しました。投稿して助けてくれたすべての人に感謝します。列の型が短すぎました (varchar(25)) - 拡張してログインできました。皆様のコメント、有り難う御座いました。

作成したテスト アカウントを使用してログインしようとすると、いくつかの問題が発生します。独自のCMSを作ろうとしています。現在、登録ページが完成し、ログインページで作業しています。登録時にユーザーのパスワードを MD5 しました。このアカウントを使用してログインしようとすると、ログイン ページで生成されたハッシュは、SQL データベースに保存されているハッシュと決して一致しません。

これが私のPHPコードとMySQLクエリです:

$username = mysql_real_escape_string($_REQUEST['username']);
$password = mysql_real_escape_string($_REQUEST['password']);

$query = mysql_query("SELECT username FROM records WHERE username='".$username."'") or die(mysql_error());  
$result= mysql_fetch_array( $query );

if($result[0] == $username) {

        $query = mysql_query("SELECT password FROM records WHERE username='".$username."'") or die(mysql_error());
        $result = mysql_fetch_array( $query );
        $passHash = md5($password);

        echo "Hash: ".$passHash."<br/>";
        echo "User's hash: ".$result[0];

        if($result[0] == $passHash) {
            echo "XXXXX: WIN";
        }
        else {
           echo "fail";
        }

「alex」というアカウントがあります。登録ページで生成された MD5 は「1c13465e24d91aca4d3ddaa1b」です。ログイン ページで生成された MD5 ハッシュは「1c13465e24d91aca4d3ddaa1bc3e7027」です。

ここに私の登録ページのコードがあります:

$username = mysql_real_escape_string($_REQUEST['username']);
$password = mysql_real_escape_string($_REQUEST['password']);
$md5_pass = md5($password);
mysql_real_escape_string(mysql_query("INSERT INTO records (username, password, ) VALUES('$username', '$md5_pass' ) ") or die(mysql_error()));  

私は何を間違っていますか?私はここで検索していて、見ました:

PHPとmysqlを使用したmd5ハッシュログイン

しかし運がない。どんな助けでも大歓迎です!

4

2 に答える 2

4

パスワードハッシュを格納する列が短すぎる可能性がありますVARCHAR(25)
大きくする:CHAR(32)またはBINARY(16)
参照:

于 2012-05-28T08:21:43.887 に答える
1

まず、単一のSELECTステートメントを使用してユーザーデータを取得します。

$query = mysql_query("SELECT username FROM records WHERE username='".$username."' AND password='".md5($password)."'") or die(mysql_error());  

2番目のポイント-mysql_*関数を使用しないでください-それらは時代遅れです。PDOまたはMySQLiに切り替えます。

DBパスにスペースがある可能性があります...

于 2012-05-28T08:20:34.733 に答える