1

ログインページを作成しています。以下のコードは、ユーザーがユーザー名とパスワードの両方の入力フィールドに入力する場合です。

しかし、ユーザー名を「admin」として入力し、パスワードを間違えた場合でも、それを受け入れてメンバーページにリダイレクトします。

PHPを始めたばかりであることに注意してください。

$input['user'] = htmlentities($_POST['username'], ENT_QUOTES);
$input['pass'] = htmlentities($_POST['username'], ENT_QUOTES);

if ($stmt = $mysqli->prepare("SELECT * FROM members WHERE username=? AND password=?"))
{
    $stmt->bind_param("ss", $input['user'], md5($input['pass'] . $config['salt']));
    $stmt->execute();
    $stmt->store_result();

    if ($stmt->num_rows > 0)
    {
        //successful login/set session
        $_SESSION['username'] = $input['user'];
        header("Location: members.php");
    }
    else
    {
        $error['alert'] = "Error: Username/password incorrect!";
        include('views/v_login.php');
    }
}
else
{
    echo "Error: Could not prepare MySqli result.";
}
4

3 に答える 3

1
$input['pass'] = htmlentities($_POST['username'], ENT_QUOTES);

への変更

$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);

論理的には、このエラーでbumパスワードを入力することはできませんが、パスワードがユーザー名と同じでない場合は拒否する必要があります。

于 2012-06-06T15:50:34.597 に答える
0

それを見てみると、これは突き出ていました

変化する:

$stmt->num_rows > 0

に:

$stmt->num_rows == 1

まず、データベースがどのように見えるかについての説明がないため、結果がいくつあるかは誰にもわかりません。また、ユーザーごとに1つのログインがある場合、その結果には1行のみが含まれる必要があります。

于 2012-06-06T15:56:36.043 に答える
0

更新するだけです。これは現在修正されています。これは私のばかげた間違いのユーザー名とパスワードでした。

$input['user'] = htmlentities($_POST['username'], ENT_QUOTES);
$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);

また、IFELSE条件内で適切に比較して修正しました。

$stmt->num_rows != 0

みんなありがとう :)

于 2012-07-19T06:33:15.397 に答える