Pergunta

Estou lutando com meu código abaixo, estou lendo o nome de usuário de usuários e tentando inserir seu nome em uma tabela SQL chamada Licenças, a tabela contém 2 colunas 1 contém números de licença que o outro é nulo no momento, mas um O nome de usuário deve ser inserido ao lado de um quando esta página carregar. Atualmente, a página apenas voa constantemente e nada é inserido na tabela. O usuário Inside Connection1.asp possui acesso de leitura/gravação ao banco de dados.

Alguma ideia? Obrigado

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

Solução

Se o usuário não for encontrado, você deve fazer uma inserção em vez de atualizar?

Se a atualização estiver correta, altere o último nulo ... remova as cotações. Agora você está comparando um valor de string de 'NULL' em vez do valor NULL E deveria ser nulo

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

Além disso, veja se você pode comentar o <BODY ... > Marque e crie um novo sem a função de recarga e veja se isso faz a diferença.

Por fim, leia a injeção de SQL porque seu código é propenso a ataques de injeção. Pesquise no Stackoverflow.com por injeção de SQL e você encontrará muitas explicações, exemplos e curas.

Outras dicas

Verifique se o logon_user está realmente retornando quaisquer dados. Se você tiver o IIS Security definido como acesso 'anônimo', isso não será preenchido com nada.

Seu código também seria potencialmente propenso a ataques de injeção de SQL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top