当我尝试使用以下代码登录时,它给我一个错误,说
Microsoft JET 数据库引擎错误"80040e10"。
没有为一个或多个必需参数提供值。
/ghbet/login2.asp,第 11 行
登录1..ASP:
<html>
<head>
</head>
<body>
<table align=center>
<tr>
<td align=center>
<b> LOGIN </b>
<br>
<br>
<br>
<form action=login2.asp method=post>
UserName <input type=text name=uname /> <br>
Password <input type=password name=password /> <br><br>
<p align=right> <input type=submit value=LOGIN name=submit /> </p>
</td>
</tr>
</table>
</form>
</body>
</html>
登录2..ASP:
<%
dim name, pass
name=Request.form("uname")
pass=Request.form("password")
set conn=server.CreateObject("ADODB.connection")
conn.ConnectionString="provider=Microsoft.jet.OLEDB.4.0;data source=C:Inetpubwwwrootghbetghbet.mdb"
conn.Open
set rs=Server.CreateObject("ADODB.recordset")
query="select * from ghbet_users where username='" & name & "'and password='" & pass & "'"
rs.Open query,conn
if not rs.EOF then
Response.Write " <h4> LOGIN SUCCESSFUL </h4>"
else
response.Write "<h4> USER NAME & PASSWORD NOT MATCHING </h4>"
end if
%>vb
请帮忙
获取"没有为一个或多个必需参数提供值"错误的可靠方法是询问不存在的字段(名称)。因此,请检查ghbet_users是否真的具有用户名和密码字段。
正如Cheran指出的那样,保留词可能会导致问题。由于没有人知道在下一版本的 DBMS 中将保留哪些单词,因此请将所有名称括在 [] 中。
您应该认真考虑使用参数查询来避免 SQL 攻击和数据类型/引用问题。
您的 If 子句接受登录尝试,如果"不是 rs。EOF" - 即查询是否返回一条或多条记录;应测试一条包含预期值的记录。
PASSWORD
是一个保留的 Jet SQL 关键字(请参阅 Microsoft Jet 4.0 保留字列表)。尝试在查询中用方括号[]
列名括起来:
query="select * from ghbet_users where username='" & name& "'and [password]='" & pass & "'"
看起来您分配给查询的字符串是此错误消息的根。确保在字符串中连接的变量之间提供空格。
我要做的第一件事是确保参数包含值,确保在发布表单时,它会传递"名称"和"密码"的值。