首页 > 解决方案 > 如何从 asp 中的“选择多个”框中更新 SQL 数据库中的多个值?

问题描述

我正在设置一个多选框以允许一次将多个值添加到数据库中,并使用以下代码:

<select name="add" style="width: 100%; height: 100px" multiple>
                <%
                    do until rsCategory.bof or rsCategory.eof = true

                    %>
                    <option value="<%=rsCategory("catID")%>"><%=rsCategory("Cat")%></option>
                <%
                rsCategory.movenext
                loop %>
                </select>

此代码可以很好地显示多项选择,并且是对我拥有的单个选择的现有下拉框的扭曲。我遇到的麻烦是将以下代码转换为将多个值输入到 SQL 数据库中,而不仅仅是一个值:

<!-- #include virtual = "includes/coredataconn.asp "  -->
<!-- #include virtual = "includes/cleansql.asp"  -->
<%

if session("customername") <> "admin" then response.redirect "logout.asp"
accID = cleansql(request.form("accountID")) 
catId = cleansql(request.form("add"))


set rsNU = server.createobject("adodb.recordset")
sqNU = "SELECT * FROM categoriestable WHERE ((([AccountNo])='" & accID & "') OR accountID='" & accID & "');"
rsNU.open sqNU, cnnCore, 3, 3
rsNU(catId) = "Y"
rsNU.update
response.Redirect "../admin_categories.asp?account=" & accID

%>

我会想象某种 for 循环会起作用,但我正在努力让它正确。有没有人有任何想法?

先感谢您。

标签: sqlvbscriptasp-classicadodb

解决方案


我不知道你的 cleansql 函数做了什么,但至少它表明你知道 SQL 注入风险,所以我会跳过那部分......

例如,“多个”选择以“15,23,45,28”格式返回其值。

因此,您可以使用以下内容:

accID = cleansql(request.form("accountID")) 
catId = cleansql(request.form("add"))

sqNU = "UPDATE categoriestable SET whatever_field = 'Y' WHERE (AccountNo='" & accID & "' OR accountID='" & accID & "') AND catID IN (" & catId & ")"
cnnCore.Execute sqNU

如果您的 catID 字段是数字,这应该按原样工作,否则您必须添加将 catId 内容格式化为“'15','23','45','28'”的代码


推荐阅读