0

コードは返された値を表示し、それが 1 より大きい場合は「はい」を返します。しかし、$check の WHERE 句に問題があります。コードを取り出すと問題なく動作しますが、追加すると、ページが間違った値を返します。何が問題なのですか?

<?php

$con = mysqli_connect("127.0.0.1","root","","lian");

$u= $_GET['username'];
$pw = $_GET['password'];

$check = "SELECT username,password FROM users WHERE username='$u' AND password='$pw'";

$login = mysqli_query($con,$check) or die(mysqli_error($con));

$num_rows = mysqli_num_rows($login);
echo "$num_rows \n";

if (mysqli_num_rows($login) == 1) {
$row = mysqli_fetch_assoc($login);
echo 'Yes'; 
exit;
}

else {
echo 'No';
exit;
}
4

3 に答える 3

0

このようにしてみてください

$u= trim(mysqli_real_escape_string($_GET['username']));
$pw = trim(mysqli_real_escape_string($_GET['password']));
$check = "SELECT username,password FROM users WHERE username='$u' AND password='$pw'";

また、ユーザー名とパスワードの組み合わせが一意であることを確認してください。users テーブルに2 つのエントリがあるとします。

ユーザー名="abc" パスワード="12345"

次に、mysqli_num_rows() 関数は 2 つの行を返し、

if (mysqli_num_rows($login) == 1)

条件はfalseを返し、ユーザーが存在しないことを意味します。

于 2013-05-06T02:34:07.553 に答える
0

インジェクションの脆弱性は別として、特殊文字または空白が原因である可能性があります。GET 値をトリミングしてみてください。

$u = trim($_GET['username']);
$pwd = trim($_GET['password']);

結果の数が 0 になっていますか? また、開発環境でステートメントをエコーし​​て、ステートメントが何であるかを正確に確認してください。

于 2013-05-05T23:42:22.207 に答える