ASP经典 - 如何加入一个字符串数组/ join / implode不起作用

时间:2013-02-27 13:23:21

标签: join asp-classic request.form

Dim stringIdCollection
    stringIdCollection = Join( Request.Form( "id" ), "', '" ) )    
Dim whereStatement
    whereStatement = "WHERE id IN ('" & stringIdCollection & "');"

我收到此错误:

  

Microsoft VBScript编译错误'800a0401'

     

预期声明结束

     

/includes/Process.asp,第49行stringIdCollection = Join(   Request.Form(“id”),“','”))   -------------------------------------------------- ---------------------- ^

甚至可以在Request.Form上使用Join吗?

我希望输出为:

  

“WHERE id IN('122','344','599')”

2 个答案:

答案 0 :(得分:4)

join函数需要一个数组作为第一个参数。在Classic ASP(VBScript)中,Request.Form中的数据总是字符串,因此不可能在其中包含实际数组,您必须自己构建数组:

Dim myArray
myArray = Array(Request.Form("id"), Request.Form("id2"), Request.Form("id3"))

Dim stringIdCollection
stringIdCollection = Join( myArray , "', '" ) ) 

另请注意,在Classic ASP中,如果您提交多个具有相同名称的表单字段(即id),则它们将以逗号分隔的Request.Form进入。

与PHP中可以做的相反,在末尾附加方括号[]的多个表单字段命名,ASP不会将其转换为Request.Form中的数组。

答案 1 :(得分:1)

这看起来像第二行上应该删除的额外括号:

    stringIdCollection = Join( Request.Form( "id" ), "', '" )

编辑:Request.Form的文档有点误导。 Request.Form("item")返回的值实际上不是数组,而是类似数组的对象。您可以使用Count属性迭代这些值,并在迭代时构建字符串:

Dim stringIdCollection, i

For i = 1 To Request.Form("id").Count
    If Len(stringIdCollection) <> 0 Then
        stringIdCollection = stringIdCollection & ","
    End If
    stringIdCollection = stringIdCollection & "'" & Request.Form("id")(i) & "'"
Next