3

なぜそれが起こっているのか本当にわからないという奇妙な問題があります。まず、正常に動作しているphpを使用してデータベースにアクセスしようとしています。必ずアクセスできる(チェックされている)ので、その領域が正しいと確信しています。

私はphpコードでクエリにアクセスしています:

mysqli_query($database, "SELECT * FROM user WHERE username = $username AND password =     $password");

データベースにアクセスしています:

データベース定義

これが問題です。ユーザー名とパスワードでログインしようとしています。間違ったユーザー名を入力すると、それを取得して拒否するため、ユーザー名の部分に問題はありません。ただし、正しいユーザー名とパスワードを使用すると、パスワードが原因で拒否されます。しかし、正しいユーザー名とパスワード「password」(列名と同じ、同じ効果を持つ異なる列名で試してみました)を使用すると、ユーザー名が正しい限り、機能します。

以前は、echoを使用して、入力したユーザーとパスワードの両方が受信されていることを確認していました。

4

1 に答える 1

3

変化する

mysqli_query($database, "SELECT * FROM user WHERE username = $username AND password = $password");

に:

mysqli_query($database, "SELECT * FROM user WHERE username = '$username' AND password = '$password'");

つまり、文字列を引用符で囲みます。

データベースから実際にエラーが返されている可能性があります...したがって、それも確認する必要があります。

編集: SQLインジェクションに関する@MarcelKorpelのコメント/警告にも注意してください。上記の私の解決策は、構文エラーを修正します。Marcelの警告は、アプローチのエラーを修正します;-)要点は、$usernameまたは$password文字列がサニタイズされていない場合、SQLコードを(たとえば)エンドユーザーが入力して、クエリ文字列を意図しないものに効果的に変更できることです(あなたが)それは(おそらく)悪意があるかもしれません。

于 2013-03-25T11:20:47.757 に答える