2009-10-06 3 views
0

Я борюсь с моим кодом ниже, я читаю имя пользователя, зарегистрированное в сети, и пытаюсь вставить его имя в таблицу SQL, называемую лицензиями, таблица содержит 2 столбца 1 содержит номера лицензий, остальные - все значения в настоящий момент но при загрузке этой страницы имя пользователя должно быть вставлено рядом с одной. В настоящее время страница просто петли постоянно, и ничего не вставляется в таблицу. Пользователь внутри connection1.asp имеет доступ для чтения/записи к базе данных.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 
%> 
+1

кашель ... SQL-инъекция ... по крайней мере, вы можете заменить «ничем» или «... маловероятной атакой, но все же возможно» –

ответ

1

Если пользователь НЕ найден, должен ли вы делать INSERT вместо UPDATE?

Если UPDATE верен, измените последний NULL ... удалите кавычки. Прямо сейчас вы сравниваете строковое значение 'NULL' вместо значения NULL и он должен быть IS NULL

SET ROWCOUNT 1; UPDATE Licenses2 SET userid = '" & user & "' WHERE userid IS NULL; 

Кроме того, если вы можете закомментировать <BODY ... > тег и создать новый без RELOADFUNCTION и посмотреть, если это имеет значение.

И наконец, прочитайте на SQL Injection, потому что ваш код подвержен атакам с инъекцией. Поиск на StackOverflow.com для SQL Injection, и вы найдете множество объяснений, примеров и излечений.

+0

Я изменил «NULL» на NULL без изменений. Я думаю, что UPDATE верна, поскольку запись существует с лицензией в первом столбце. Спасибо – 2009-10-06 16:17:15

+0

Это должна быть проверка NULL IS - я изменил ее выше. –

+0

Спасибо, это сработало отлично! – 2009-10-07 08:23:51

0

Проверьте, действительно ли LOGON_USER возвращает любые данные. Если у вас установлена ​​защита IIS на «Анонимный» доступ, это не будет заполнено ничем.

Ваш код также будет потенциально подвержен атакам SQL-инъекций.

+0

LOGON_USER возвращает имя пользователя. благодаря – 2009-10-06 16:16:24

Смежные вопросы