从数据库生成和验证密码

Password generation and validation from database

我正在尝试为一项作业制定密码验证方法,该方法要求我只允许密码包含 '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

我该怎么做才能解决这个问题?我似乎无法正确设置格式,但逻辑似乎在那里。

这应该能让查询正常工作。比较是在 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>