0

ログインページのコードを作成しました。コードは昨日まで完全に機能していました。しかし、今日は私が望んでいたように機能していません。現時点では私のローカルホストにあります。

if (isset($_POST['userpassword']))
        {
            include('db.php'); //I am using passwordu instead of password.
            $query = "SELECT * FROM users WHERE username = '".$_REQUEST['username']."' AND passwordu = '".md5($_REQUEST['userpassword'])."'";
            $result = mysql_query($query);
            $num_rows = mysql_num_rows($result);
            if ($num_rows == 1)
            {
                echo "Congratulations. You are now Logged in. You will be logged out when the Browser is closed.";
                $_SESSION['logval'] = TRUE;
            }
            else
            { 
                            echo "You Have Entered Wrong Information. <b>Please Try AGAIN."; }
?>

間違ったパスワードを入力するたびに、正しいものが表示されます。しかし、正しいパスワードを入力すると、パスワードが受け入れられなかったことも示されます。

このコードは昨日まで完全に機能していました。今日、この問題が発生しました。

この問題の解決策を見つけました。

passwordu フィールドに varchar(20) を使用していました。そのため、機能していませんでした。ここで、(安全のために) 100 などのより大きな値に設定しました。そして、それは魅力のように機能します。

4

2 に答える 2

1

OK、これは漠然とした状況であり、投稿されたコード スニペットに基づいて、何が問題なのかを判断するのは非常に困難です (スニペット自体は正しいようです)。

最初に行うことは、デバッグを試すことです。どうやらこの条件はtrueを返していません:

if ($num_rows == 1)

したがって、最初に aを実行して、die("num_rows = ".$num_rows);返される値を確認します。ここに投稿すると、そこからさらに進むことができます。

于 2012-09-26T14:04:34.293 に答える
1

私が目にする1つの明白な問題は、あなたがチェックしているかどうかです$num_rows == 1. ほとんどの場合、これで問題ありませんが、アカウントが重複しているという潜在的な問題を隠している可能性があります。これは、同じアカウントを複数持っている場合、実際には資格情報が間違っているのに間違っているという錯覚を与えるということです.

テストとして、以下の例を試して、動作するかどうかを確認してください。

if ($num_rows >= 1)
{
   //Correct info
}
else
{
   //Incorrect info
}

これで問題は解決するかもしれませんが、アカウントが重複する理由を理解する必要があります。

編集

以下のコメントでマイク・ブラントの提案を検討します。確かに、重複の可能性を防ぐために一意の制約が必要です。

于 2012-09-26T14:02:10.367 に答える