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#,
</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.我只是没有得到它。
谢谢
答案 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_integer