数组内容作为变量

时间:2015-05-06 01:58:41

标签: arrays coldfusion

Noob在这里提问,我已经将所有这些数据都放在一个数组中,但我无法弄清楚如何使用它做任何事情。我需要在SQL更新查询中使用一个元素,另一个元素仅用于显示目的。这有效:

<cfset RecID=[]>
<cfset DistListNames=[]>    
<cfloop list="#form.ListName#" index="listcount">    
  <cfset arrayAppend(RecID, listFirst(listcount,":"))>
  <cfset arrayAppend(DistListNames, listLast(listcount, ":"))>    
</cfloop>    
<cfdump var=#RecID#>    
<cfdump var=#DistListNames#>

但除了在动作页面上显示那些小绿框外,我无法用它做任何事情。如何从RecID和DistListNames的内容设置变量?

更新:

我最终得到了Dan的建议并使用表单变量而不是数组,仍然无法绕过数组。

我的确认页面使用此功能:

<cfloop list="#form.ListName#" index="listcount">    
<cfset session.DistListID=(listFirst(listcount,":"))>
<cfset DistListNames=(listLast(listcount, ":"))>    
<cfoutput>    
#session.DistListID# #DistListNames#,&nbsp;    
</cfoutput>    
</cfloop>

这给了我确认页面上的列表名称,我现在只有用于测试的RecID。到目前为止一切都那么好吧?

当我点击&#34;是&#34;按钮确认,我运行此循环只输出RecID以确保它在我基本上围绕cfquery进行SQL更新的循环之前有效。 (所有这些代码都在同一页面上,我不打开另一个文件作为操作页面。)

<cfloop list="#session.DistListID#" index="RecID">    
<cfoutput>#RecID#</cfoutput>    
</cfloop>

我得到的只是列表中最后一项的RecID。我知道这是另一个noob问题,但我保证我整个上午都在网上阅读,试图解决这个问题,我已经尝试过=&#34; 1&#34; to =&#34; #ListLen(session.DistListID#&#34;但这只是给了我1.我只是没有得到它。

谢谢

3 个答案:

答案 0 :(得分:1)

如果要在SQL语句中使用变量,可以使用:

<cfquery name="myQuery" datasource="myDatasource">
  UPDATE table_name 
  SET column_name = <cfqueryparam cfsqltype="cf_sql_varchar" value="#RecID[1]#">
  WHERE...
</cfquery>

只显示页面的数组值:

<cfoutput>#DistListNames[1]#</cfoutput>

将数组中的值存储在CF变量

<cfset myVar = DistListNames[1]>

请记住,CF数组使用基于1的索引,因此如果您尝试使用DistListNames [0],则会收到错误。

答案 1 :(得分:0)

OK. After all that, here's what I ended up with:

\r

Suggestions and critique's always welcome.

Thanks again to all.

答案 2 :(得分:0)

  

update [sic]将用户ID和列表的recid写入a   结表,就是它

然后你不需要循环或数组。

your other thread所述,在相同表单字段中存储“id”和“name”会使事情变得比必要的更复杂:)只需存储“ID” “(仅),你可以完全避免循环。

 <!--- changed field "name" to be more descriptive --->
 <input type="checkbox" name="RecIDList" value="#RecID#">

提交表单时,FORM.RecIDList将包含逗号分隔的“RecID”值列表。由于这些值的来源是数据库表,只需将这些ID提供给SELECT语句即可。然后,您可以在单个查询中插入所有选定的记录 - 无需循环。这些方面的东西(显然添加验证):

INSERT INTO tbl_DistListJunction (DistListID, userID)    
SELECT RecID
       , <cfqueryparam value="#session.listUser#" cfsqltype="cf_sql_varchar">
FROM   YourDistrictTable
WHERE  RecID IN 
       (
        <cfqueryparam value="#FORM.RecIDList#" cfsqltype="cf_sql_integer" list="true">
       )  

NB:

  • “cf_sql_int”不是有效类型。正确的类型是cf_sql_integer