2012-05-11 1 views
0

ログインしようとしたユーザーのユーザー名とパスワードを確認する単純なスクリプトを作成しようとしています。しかし、私はいくつかの問題に遭遇しています。SELECTクエリの問題 - ユーザーのログインシステム

以下のスクリプトを実行しようとすると、SUCCESSは印刷しません。しかし、ユーザー名とパスワードが間違っているかのように、実際に入力されたユーザー名とパスワードが正しいことを知っています。

$username = $_POST['username']; 
$password = $_POST['password']; 

$result = mysql_query("SELECT * FROM users WHERE username='.$username.' AND password='.$password.'"); 

while($row = mysql_fetch_array($result)){ 
    echo 'SUCCESS'; 
} 

私はしかし、下のスクリプトを実行しようとすると、成功は正しいです、(私はこれまでのところ、私のデシベルを持っているサンプルユーザの数である)を2回出力します。

私は上記のAND MySQLクエリに問題があると思いますが、それは私には正しいようです...上記の最初のクエリに問題がありますか?もしそうでなければ、他に何が問題なのか?

​​
+0

fyi! - http://php.net/manual/en/function.mysql-real-escape-string.php – trapper

+3

一部の人がSQLインジェクションの脆弱性について言及しましたが、データベースに平文のパスワードを格納していないことを確認してください。シンプルな 'md5()'も優れていますが、最良の結果を得るには、強力な暗号化方式と適度に長い塩を使用してください。 – davethegr8

+0

アドバイスをいただき、ありがとうございます。私はまだウェブサイトの作成の初期段階にあり、まだセキュリティ対策を講じていません。私は確かに将来する予定です、ありがとうございます;) – AnchovyLegend

答えて

3

あなたはparsing variablesで、concatenatingではなく、.である必要はありません。

ぽっかり SQL injection脆弱性を無視
"SELECT * FROM users WHERE username='$username' AND password='$password'" 
+0

ありがとう!あなたは正確に正しいです、これは私の問題を解決しました。私はあなたの助けに感謝します。 – AnchovyLegend

+0

問題ありません。お役に立てて嬉しいです :-) –

3

usernameが保護キーワード あり、これを試してみてください。

$result = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'"); 
+1

いいえ、それはありません。 http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html –

+0

応答いただきありがとうございます。私はあなたが問題を複雑化していると思っています:) @Rocketsの応答に注意してください。 – AnchovyLegend

+0

@Rocketあなたは正しいです – Bloafer

2

が代わりにこれを試してみてください:

$result = mysql_query("SELECT * FROM users WHERE username=\"$username\" AND password=\"$password\""); 

明らかに、これはデータを挿入する素晴らしい方法ではありません。データを最小限にするには、mysqliを見てください。

+0

二重引用符をエスケープする代わりに、一重引用符をクエリに使用できます。 –

3

、あなたは間違ってあなたのクエリ文字列を構築している:

$result = mysql_query("SELECT * FROM users WHERE username='.$username.' AND password='.$password.'"); 
                 ^  ^

あなたが表示された期間が過ぎている(とパスワードセクションの「文字列モード」のままです)ので、文字列連結を行うのではなく、クエリ文字列にリテラルピリオドを埋め込みます。

リモート期間

、あなたは(SQLインジェクションに対してまだ脆弱な)したほうが良いでしょう:余分"のI

$result = mysql_query("SELECT * FROM `users` WHERE `username`='".$username."' AND `password`='".$password."'"); 

お知らせ:

$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'"); 
1

ではなく、このラインを試してみてくださいそれが探していた前に追加されました'.$username.'