我正在努力使用下面的代码,我正在阅读登录用户的用户名并尝试将他们的名字插入名为许可证的SQL表中,该表包含2列1包含许可证号码,另一列是所有空值当这个页面加载时,应该在第一侧插入一个用户名。目前页面只是循环不变,没有任何内容插入到表中。 connection1.asp中的用户确实具有对数据库的读/写访问权。
有什么想法吗?感谢
<%@LANGUAGE="VBSCRIPT" LCID=1033%>
<%
aName = Split(Request.ServerVariables("LOGON_USER"), "\")
user = aName(UBound(aName))
user = UCase(user)
Erase aName
%>
<!--#include file="Connections/connection1.asp" -->
<%
Dim Recordset1
Dim Recordset1_numRows
Set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_connection1_STRING
Recordset1.Source = "SELECT * FROM Licenses2 WHERE userid = '" & user & "';"
Recordset1.Open()
%>
<HTML><HEAD></HEAD>
<BODY leftmargin="5" onLoad="setTimeout('reloadFunction()',500000)">
<% Do While NOT Recordset1.EOF %>
<% strUserName =(Recordset1.Fields.Item("userid").Value)%>
<% response.write strUserName %>'s Serial Number:
<% strSerial =(Recordset1.Fields.Item("serial").Value)%>
<% response.write strSerial %>
<% Recordset1.movenext %>
<% loop %>
<%
If strUserName = user then
'record found do nothing
'response.write "user found"
else
adoCon.Execute = "SET ROWCOUNT 1; UPDATE Licenses2 SET userid = '" & user & "' WHERE userid = 'NULL';"
Response.AddHeader "Refresh", "3"
End if
%>
</BODY>
</HTML>
<%
Recordset1.Close()
Set Recordset1 = Nothing
Set Recordset2 = Nothing
%>
答案 0 :(得分:1)
如果找不到用户,你应该进行INSERT而不是UPDATE吗?
如果UPDATE正确,请更改最后一个NULL ...删除引号。现在,您正在比较'NULL'
的STRING值而不是值NULL
,它应该是IS NULL
SET ROWCOUNT 1; UPDATE Licenses2 SET userid = '" & user & "' WHERE userid IS NULL;
另外,看看你是否可以注释掉<BODY ... >
标签,并在没有RELOADFUNCTION的情况下创建一个新标签,看看是否会产生影响。
最后,请阅读SQL注入,因为您的代码容易受到注入攻击。在StackOverflow.com上搜索SQL注入,你会发现很多解释,例子和治疗方法。
答案 1 :(得分:0)
检查LOGON_USER是否实际返回任何数据。如果您将IIS安全性设置为“匿名”访问,则不会填充任何内容。
您的代码也可能容易受到SQL注入攻击。