Синтаксическая ошибка (отсутствует оператор) в выражении запроса - PullRequest
0 голосов
/ 07 февраля 2012

Я знаю, что это распространенная ошибка, но я все еще не могу решить ее самостоятельно. Что я пытаюсь сделать, так это то, что у меня есть элемент SELECT с именем status , который позволяет пользователю выбирать свой статус занятости, я хочу просто получить результат и обновить ячейку состояния user_table (файл доступа). Любой ответ будет с благодарностью!

Код ниже:

<!--#include file="../conn/conn.asp"-->
<%
id=request.QueryString("id")
status=request.Form("status")
sql="select * from user_table where id="&id
set rs=conn.execute(sql)     
sql="update user_table set Status='"+status+"' where id="&id
'response.Write sql
conn.execute(sql)
conn.close
response.Write "<script>alert('Change Sucessful!');</script>"
set conn=nothing
response.end()
%>

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Я думаю, что у вас могут быть проблемы с conn.execute (sql), а также response.end ()

Чтобы исправить это, вам нужно сделать следующее:

conn.execute sql

или

Call conn.execute(sql)

Но, да, вы должны следовать другим комментариям, опубликованным, поскольку ваша техника имеет проблемы с безопасностью.Вы должны рассмотреть вопрос об изменении его для использования параметров:

<!--#include file="../conn/conn.asp"-->
<%

id = request.QueryString("id")
status = request.Form("status")

sql = "select * from user_table where id = @id"
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = sql
Set cmd.ActiveConnection = conn
cmd.Prepared = True
cmd.Parameters.Refresh 
cmd.Parameters("@id") = id
Set rs = cmd.Execute
Set rs = nothing
Set cmd = nothing

sql = "update user_table set status = @status where id = @id"
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = sql
Set cmd.ActiveConnection = conn
cmd.Prepared = True
cmd.Parameters.Refresh 
cmd.Parameters("@status") = status
cmd.Parameters("@id") = id
Set rs = cmd.Execute
Set rs = nothing
Set cmd = nothing

response.Write "<script>alert('Change Sucessful!');</script>"
Set conn = nothing
response.end
%>
0 голосов
/ 07 февраля 2012

Я предполагаю, что conn.asp оставляет conn открытым?в противном случае вам нужно открыть его.Кроме того, что показывает, когда вы раскомментируете строку response.write sql?

И вы определенно открываете себя хакерам.Вам необходимо «очистить» все, что исходит от request.form или request.querystring (с, по крайней мере, replace(..., "'", "''"), или намного лучше, использовать хранимые процедуры вместо простых sql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...