-1

ユーザーが正しいパスワードを入力したかどうかを確認するコードがあります。

if (isset($_POST['userpassword']))
{
    include('db.php');
    //I have used the name passwordu instead of password in the database as well.
    $query = "SELECT * FROM users WHERE username = '".$_REQUEST['username']."' AND passwordu = '".md5($_REQUEST['userpassword'])."';";
    $result = mysql_query($query);
    if ($result){ //THIS IS WHERE I FEEL THE ERROR IS
        echo "Congratulations. You are now Logged in. You will be logged out when the Browser is closed.";
        $_SESSION['logval'] = TRUE; //Sets the User Logged in for the complete session.
    }
    else echo "Sorry, You Entered Wrong Info.";
}

ただし、間違ったパスワードを入力してもログインを受け付けます。

ここで何が問題なのですか?
また、概念的な間違いを犯している場合は、ユーザーが正しい情報を入力したかどうかを確認する正しい方法を教えてください。

4

6 に答える 6

2

レコードが返されなくてもクエリが成功した場合、クエリの結果は true になります。代わりに、返されたレコードの数を確認してください。

于 2012-09-25T17:50:58.470 に答える
2

完全に正直に言うと、何が間違っているかというと、コードがMySQL インジェクション

を許可していること です。

クエリが成功した場合、mysql_query() は true を返します。そうでない場合は false。
mysql_num_rows() は行をカウントします。

if ( mysql_num_rows(mysql_query("some query")) == 1 ) { logged in }
于 2012-09-25T17:54:09.137 に答える
1

if ($result)に変更if (mysql_num_rows($result) > 0)

于 2012-09-25T17:52:35.833 に答える
-1

;クエリの末尾から を削除します。必要ありません。

... md5($_REQUEST['userpassword'])."';";
                                     ^---this one
于 2012-09-25T17:52:00.920 に答える
-1

それは空のセットを返しますが、このような状況では、私はこれを好みます

$query=<<<HERE
SELECT count(*) as count form users where username=" " and password=" "
HERE;
$send=mysql_query($query);
$row=mysql_fetch_assoc($send);
$count=$row["count"];
if($count=="0"){// not logged in}
else if($count=="1"){//logged in}

カウント値を確認してからログインを提供し、mysql_query の使用を停止して、pdo に切り替えます

于 2012-09-25T17:53:49.250 に答える
-3

変化する

$query = "SELECT * FROM users WHERE username = '".$_REQUEST['username']."' AND passwordu = '".md5($_REQUEST['userpassword'])."';";

$query = "SELECT * FROM users WHERE username == '".$_REQUEST['username']."' AND passwordu == '".md5($_REQUEST['userpassword'])."';";

===演算子は同じではありません。は、等しいことを意味しますが、等しいことを意味することはできませんが等しいこと==を意味する比較演算子です。=

また変更

$result = mysql_query($query);

$result = mysql_num_rows(mysql_query($query));

行が存在するかどうかに関係なく、クエリは正常に実行されるため、常に true を返します。

于 2012-09-25T17:52:53.760 に答える