【问题标题】:Separate numbers retrieved from one database field从一个数据库字段检索的单独数字
【发布时间】:2017-04-11 19:55:39
【问题描述】:

不确定这是否可行:

我有一个复选框列表如下:

<input type='checkbox' name="item" value="<%=rs("ID")%>" /> <%= rs("Item Name") %>

然后我将采用所选值:

item_id = request.form("item")

它写入一个名为 item_selected 的数据库字段,它是 varchar(50),并在数据库中记录如下:

31、32、45

也不确定它是如何工作的,因为它不是一个数组(据我所知)而且我没有明确地用逗号分隔这些值。

但我想做的是检索值并循环遍历每个 ID 并使该选项“选中”(仅检查他们选择的项目),这是用于更新订单页面。

我尝试通过获取所有项目 ID 并尝试与他们选择的 ID 进行比较并使用“已检查”来检查该选项来做到这一点

任何帮助将不胜感激。

【问题讨论】:

  • 您只显示一个复选框,但我怀疑它们都具有相同的名称。这就是它们最终成为数组的方式。
  • 是的,我是这么想的,但我不确定。它循环遍历用户可以选择他们想要的项目的所有 ID。都带有这个'name = "item"'
  • 如果我理解正确,您想知道如何根据字段中的内容将复选框标记为选中。您可以将字段值转换为数组,并在创建每个复选框时,在数组中搜索特定复选框的值。如果找到,请将 checked='checked' 添加到标签中。
  • 正确:但不知道该怎么做,我尝试将检索到的值转换为例如31, 32, 45 到一个数组中,然后像你说的那样循环每个 ID,只是不确定代码会是什么样子或知道如何做

标签: mysql asp-classic


【解决方案1】:

首先,您需要获取包含所选项目的字段值(您的逗号分隔的 id 字符串)。像这样的:

Set rs = conn.execute("SELECT item_selected FROM tblTable WHERE iID = intSomeID") 'remember to handle SQL Injection
If Not rs.EOF Then
    strItemSelected = rs("item_selected") & ","
End If
rs.Close() : Set rs = Nothing

我不知道你的复选框是从哪里来的。但是假设它们来自数据库。然后它看起来像这样:

Set rs = conn.execute("SELECT ID, ItemName FROM tblCheckboxes")
If Not rs.EOF Then
    While Not rs.EOF
        strChecked = ""
        If InStr(strItemSelected, CStr(rs("ID")) & ",") > 0 Then
            strChecked = " checked=""checked"""
        End If
        Response.Write("<input type=""checkbox"" name=""item"" value=""" & rs("ID") & """" & strChecked & " /> " & rs("ItemName") & "<br/>")
        rs.Movenext
    Wend
End If
rs.Close() : Set rs = Nothing

我尚未测试此代码,但应该可以工作,但您可能需要稍微调整一下以适应您的情况。

您也可以像这样以逗号分隔所选项目:

arrItemSelected = Split(rs("item_selected"),",")

然后在循环并写出复选框的代码中,您可以检查值是否在数组中,而不是执行 InStr()。但是您需要为此编写一个函数或从 Internet 上获取一些函数来执行此操作,因为据我所知,VBScript 没有执行此操作的内置函数。

【讨论】:

  • 感谢您的回复。最初,当用户选择项目时,它会像这样(在 varchar(50) 中)保存到数据库中:31、22、33。当我再次检索该字段时,我需要将每个 ID 与 Item 进行比较ID 并检查用户选择的所有 ID
  • 我有某种想法(可能是错误的),即获取该字段,去掉所有逗号和空格,这样你就可以在 while 循环中得到 313233,直到变量为空取前 2 个字符/数字,这将是 31,然后将其与每个项目进行比较,当匹配时使该复选框选中但唯一的问题是 ID 字段是自动递增的,显然它从 1 开始,这是一个字符/数字。不确定您的解决方案将如何工作,我是这种编程语言的新手,所以可能只是我缺乏知识。
  • 可以更改数据库中的该字段以另存为''01、02、03'等
  • 更新:您的解决方案完美运行 - 只需了解它首先做了什么:D
  • 还有一个问题,使用此解决方案,如果我有一个 ID:21 和一个 ItemID 1 和 21,它会选择 21 但也选择 1,我确定它与 InStr 相关,一直在尝试修复它却无处可去,你知道如何修复它吗?
猜你喜欢
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多