0

私は自分でこの問題を解決しようとしてきましたが、私の人生の間、それを修正することはできません。

//If they are, retreive them from the Person table    
var_dump($_POST['username']);
var_dump($_POST['password']);
$select = $this-> doQuery("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '".md5($_POST['password'])."'");
var_dump($select);  

try {    
    if (mysqli_num_rows($select) > 0){
        var_dump(mysqli_num_rows($select));
        //fetching username and password from database
        $fetch_array = mysqli_fetch_assoc($select);
        var_dump($fetch_array);     
        //Building a session for the user
        $_SESSION['username'] = $fetch_array['username'];

        //var_dump($_SESSION['username']);

        //Redirecting the user to the index page        
        header('Location:index.php');
        return true;
    }

4行目と5行目のユーザー名とパスワードの2つのvar_dumpsは、次のように返しました。

string(8) "johnny03" 
string(9) "password3" 
object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(8) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } 

パスワードとユーザー名の両方に入力した値は両方とも有効です(データベースの正しい列の下にあります。信頼してください)。mysqli_num_rows($ select)のvarダンプが何も返さないため、selectクエリに問題があると感じています。とはいえ、クエリに対して考えられるすべての変更を試しました。それは機能しますが、それでも何もありません:[誰か助けてもらえますか?

4

2 に答える 2

1

最初:クエリから中括弧を削除してみてください:

$select = $this-> doQuery("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '" . md5($_POST['password']) . "'");

編集 : ブレースは問題ありません。draw010 のコメントを参照してください。

それが問題でない場合は、draw010 が指摘したように、結果のハッシュを確認します (単純なエコーを使用して出力し、データベースと比較します。

それらが一致しているように見えても、欠落している部分がある場合は、データベースのパスワード フィールドの容量を調整してください。

パスワード フィールドのサイズが varchar(20) のように小さすぎて、ハッシュ全体が収まらない可能性があります。データベースでサイズを調整し、正しいハッシュ結果を保存してください

また、少なくともいくつかのソルトを確認してください。md5 はしばらく前から壊れているため、sha ファミリのハッシュに置き換える必要があります。

オンラインの md5 ハッシュを使用してデータベース内のハッシュを検証し、strlen を使用して測定して長さを取得することもできます。

于 2012-11-07T22:36:09.980 に答える
0

これを試して:

var_dump("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '".md5($_POST['password'])."'");

クエリをダンプします。明らかなエラーはすぐに見つけられるはずです。クエリに問題がないように見える場合は、それをコピーして PHPMyAdmin (または同様のもの) に貼り付けて、クエリをテストしてみてください。ゼロ行も返される場合、ユーザー/パスが一致しない可能性がありますか?

于 2012-11-07T22:41:33.163 に答える