2015-05-20 34 views
2

我试图使用form.elementName + countingVariable访问cfquery标记中的各个表单元素。有人能告诉我什么语法是正确做到这一点。使用coldfusion计数变量连接表单元素名称

<form> 
<select name="SetID0"> 
<option></option> 
... 
</select> 
</form> 

<cfquery> 
<cfqueryparam value="#"form.SetID & #i#"#" CFSQLType="CF_SQL_CHAR">, 
</cfquery> 

我知道有可能是这样做像创建一个列表的更好的方法,我开放给那些建议,但我想知道如果我想要现在做是可能的。

+1

你能解释一下你的_creating意味着什么list_?你想在你的SQL中运行一个IN吗? –

+1

忽略语法错误,上面是创建一个文字字符串,即“form.SetID0”,“form.SetID1”等等,而不是获得这些字段的*值*。 “FORM”是一个结构。要动态访问其中一个值,您需要使用关联数组表示法,即'FORM [“keyName”]'或FORM [“SetID”&i]'。只要看报价。附注 - 这是否最终是INSERT或UPDATE查询的一部分? – Leigh

回答

3

你大多有

<cfqueryparam cfsqltype="cf_sql_char" value="#form['setID' & i]#"> 
+0

如果您正在尝试执行WHERE someColumn IN(list),那么您将执行,其中所有输入都相同“setID”的名称而不是“setID#x#”。 –

+1

我怀疑你有一个语法错误,@Matt?你的语法是否工作,或者它应该是'#form ['setId'&i]#'? 'form.setId&i'会对这两个变量的值(不是前者的名称和后者的值)进行字符串连接,是不是? –

+0

你是对的@AdamCameron我已经修复了答案。 –

0

首先改变的下拉菜单

<form> 
<select name="SetID" multiple> 
    <option></option> 
    ... 
</select> 
</form> 

有UI部件,使这种类型的下拉菜单的很干净。考虑选择二

然后更改查询

<cfquery> 
    fieldname IN (
    <cfqueryparam value="#form.SetID#" CFSQLType="CF_SQL_CHAR" list="yes"> 
    ) 
</cfquery> 
+0

就我个人而言,我发现多个选择非常令人沮丧地与用户一起工作。因此,我只在被迫时才使用它们。 –