2016-08-02 12 views
1

受信したデータをフォームからデータベース内のデータと照合しようとしています。私は、フォーム変数をダンプし、私が見ることができるテーブルが一致しているが、ColdFusionは内FROMリスト ではないかいずれかのテーブルにある...coldfusion sqlクエリを使用してユーザーを確認する

列「キリル」を私にこれを与えたり表示されたのであれば参加の外にあり、HAVING節に表示され、 がGROUP BYリストに含まれていません。これがCREATEまたはALTER TABLE ステートメントの場合、 'Kirill'はターゲット表の列ではありません。

クエリ:

SELECT FIRST_NAME, PASSWORD 
from APP.USERS_TASK 
where FIRST_NAME = "#form.username#" 
    and PASSWORD = "#form.password#" 

また同じことは、URL経由で渡されたIDを持つだけで正常に動作します。しかし、別のテーブルで。

+2

おそらく二重引用符ではなく、一重引用符を使用する必要があります。 '... FIRST_NAME = '#form.username#' ...'? (SQLインジェクション可能?) – jarlh

+2

質問には何もしませんが、[パスワードはハッシュする必要があります](http://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database/1054033# 1054033)。 – Leigh

+0

あなたの行っていることに応じて、平文でパスワードを保存するのは実際には違法です。リーが正しい。 – TRose

答えて

6

SQLでは、文字列を二重ではなく一重引用符で囲む必要があります。

SELECT FIRST_NAME, PASSWORD 
FROM APP.USERS_TASK 
WHERE FIRST_NAME = '#form.username#' 
AND PASSWORD = '#form.password#' 

しかし、実際には、あなたは、ユーザー入力をサニタイズしてSQLインジェクションを防ぐためにcfqueryparamを使用する必要があります。これにより、データの型指定や必要な見積もりも処理されます。

SELECT FIRST_NAME, PASSWORD 
FROM APP.USERS_TASK 
WHERE FIRST_NAME = <cfqueryparam value="#form.username#" cfsqltype="cf_sql_varchar"> 
AND PASSWORD = <cfqueryparam value="#form.password#" cfsqltype="cf_sql_varchar"> 
+0

ああ、引用符の重要性を知りませんでした。 cfparamを使用する場合、型情報を指定する必要がありますか? –

+2

'cfsqltype'属性は必須ではありませんが、データベースを保護し、値が文字列または数字に正しく変換されるようにすることをお勧めします。 –

+0

必要に応じて日付/時刻を変換するのにも最適です。それらは常に正しいことをする痛みです。 –

関連する問題