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