2016-11-27 28 views
0

我試圖對一個賦值進行密碼驗證的方法,該賦值要求我只允許包含'NT'的密碼,然後是現有學生ID的最後6位數字(例如NT123456) 。用戶將在第一頁輸入他們的姓氏和密碼,然後我將通過查詢來運行它。如果記錄數大於0,那麼它們會被重定向到一個門戶網站,否則他們會被告知這是不正確的,但現在這並不重要。從數據庫中生成密碼和進行驗證

我使用的形式是在這裏:

<cfform name="form" action="PortalPage.cfm"> 
<cfinput type="Text" name="password" maxlength="8"> 
<cfinput type="submit" name="submit" value="Submit"> 
</cfform> 

其中的形式發送信息到這裏:

<cfquery name="qry1" datasource="grantme"> 
SELECT 'NT' + RIGHT(StudentID, 6) AS Passwords, Lname 
FROM Classmates 
WHERE Passwords = form.password; 
</cfquery> 
<cfoutput query="qry1"> 
#qry1.RecordCount# 
</cfoutput> 

但我發現了以下錯誤報告:

Error Executing Database Query. 
[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2. 

The error occurred in G:\InetPub2\wwwroot\student\A00507999\PortalPage.cfm: line 9 

7 : 
8 : <body> 
9 : <cfquery name="qry1" datasource="grantme"> 
10 : SELECT 'NT' + RIGHT(StudentID, 6) AS Passwords, Lname 
11 : FROM Classmates 

VENDORERRORCODE  -3010 
SQLSTATE  07002 
SQL  SELECT 'NT' + RIGHT(StudentID, 6) AS Passwords, Lname FROM Classmates WHERE Passwords = form.password; 
DATASOURCE grantme 

我該怎麼辦才能解決這個問題?我似乎無法得到正確的格式,但邏輯似乎在那裏。

+0

它看起來是從數據庫中檢索兩個值,但只提供一個值來接收它們。 – FDavidov

+0

該問題不是源於此,因爲如果我刪除WHERE子句,我可以顯示值,但是我需要WHERE子句來執行我需要的操作。 – shrimppunk

+0

我認爲我的措辭不清楚......你正在選擇'密碼,Lname'成...什麼?您是否需要指定需要接收這些TWO值的變量? – FDavidov

回答

0

這應該使查詢工作。比較是在varchar列和字符串之間進行的。字符串應該用單引號分隔。英鎊符號也是必要的。

<cfquery name="qry1" datasource="grantme"> 
SELECT 'NT' + RIGHT(StudentID, 6) AS Passwords, Lname 
FROM Classmates 
WHERE Passwords = '#form.password#'; 
</cfquery> 

爲防止SQL注入攻擊,這是編寫查詢的最佳方法。

<cfquery name="qry1" datasource="grantme"> 
SELECT 'NT' + RIGHT(StudentID, 6) AS Passwords, Lname 
FROM Classmates 
WHERE Passwords = <cfqueryparam value="#form.password#" cfsqltype="CF_SQL_VARCHAR">; 
</cfquery> 
相關問題