Pregunta

Estoy luchando con mi código de abajo, estoy leyendo que ha iniciado sesión en usuarios de usuario y tratando de insertar su nombre en una tabla de SQL llamadas licencias, que contiene la tabla 2 columnas 1 contiene los números de licencia que el otro es todos los valores nulos en el momento, pero un nombre de usuario debe insertarse junto a uno cuando carga de esta página. Actualmente la página bucles constantemente y nada se inserta en la tabla. El usuario dentro connection1.asp no haber leído / escribe el acceso a la base de datos.

¿Alguna idea? Gracias

<%@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
%>
¿Fue útil?

Solución

Si no se encuentra el usuario, debe usted hacer un INSERT en lugar de actualización?

Si la actualización es correcta, cambie la última NULL ... quitar las comillas. En este momento usted está comparando un valor de cadena de 'NULL' en lugar del valor NULL y debe ser es nulo

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

También, ver si se puede comentar la etiqueta <BODY ... > y crear uno nuevo sin el RELOADFUNCTION y ver si eso hace la diferencia.

Por último, leer sobre la inyección de SQL, porque su código es propenso a ataques de inyección. Buscar en StackOverflow.com para SQL Injection y encontrará un montón de explicaciones, ejemplos y curas.

Otros consejos

Comprobar si LOGON_USER es en realidad regresando ningún dato. Si ha establecido la seguridad de IIS para el acceso 'Anonymous', entonces esto no se rellenará con nada.

Su código también sería potencialmente propensos a ataques de inyección SQL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top