我不确定我的标题是如何解释的。坦率地说,我不确定如何将其用于文字,但这里有:
我正在从另一个页面上动态创建的表单字段中捕获变量,这些变量已经提交到包含以下代码的页面。到目前为止,一切都按照我的意愿运作。我正在获取动态命名的表单字段。现在我需要将小计美元金额加在一起以创建总计。不幸的是,由于它们的动态特性,我无法弄清楚如何将个体总数排除在循环之外,因此我可以对最终数字进行数学计算。
下面这部分代码生成小计,我需要能够将所有这些添加到一起以获得总计,但我无法弄清楚如何:
#dollarformat(val(getticket[item].ticketprice * form[item]))#
也许我需要采取不同的方法...建议/帮助赞赏。
这是完整的代码:
<CFLOOP LIST="#form.fieldnames#" INDEX="item">
<cfoutput>
<cfquery datasource="outertixdb" name="getticket[item]">
select * from tickets
where ticketid = '#item#'
</cfquery>
#getticket[item].ticketname#: #dollarformat(getticket[item].ticketprice)# x #form[item]# = #dollarformat(val(getticket[item].ticketprice * form[item]))#<br/>
</cfoutput>
答案 0 :(得分:4)
您需要使用以下格式设置name
的{{1}}属性:
cfquery
要处理总数,首先需要在<cfquery datasource="outertixdb" name="#getticket[item]#">
cfloop
然后,在循环内部,您只需将故障单的价格添加到总计
<cfset total = 0 />
此外,您应该在查询中使用<cfset total = total + getticket[item].ticketprice />
。您可以阅读更多相关信息here
最后,如果您不需要cfqueryparam
表中的所有数据,请不要使用'select * ..',只需提取您需要的数据。
答案 1 :(得分:3)
不确定我完全理解,但听起来你只是想通过“id”查找一堆票据记录。然后显示单个成本,加上总计。如果这就是您所做的一切,只需为字段指定相同的名称:ticketID
。例如:
<input name="ticketID" value="1" ...>
<input name="ticketID" value="22" ...>
<input name="ticketID" value="45" ...>
<input name="ticketID" value="16" ...>
然后,这些值将作为列表提交,即1,22,45,16
,您可以使用IN子句将其提供给查询。这使您可以在单个查询中获取所有数据。 (通常,您希望避免在循环中运行查询,因为对每个 id执行单独的数据库查询会产生大量不必要的开销并降低性能)。
*根据需要更改cfsqltype
SELECT TicketID, TicketPrice
FROM YourTable
WHERE TicketID IN ( <cfquerparam value="#FORM.ticketID#"
list="true"
cfsqltype="cf_sql_integer">
)
<强>更新强>
form[item]
是上一页中数量选择的值。
这是一个令人困惑的命名约定。我建议使用更直观的名称,如“数量”。更具描述性的内容。您仍然可以使用故障单ID生成唯一的名称,即quantity_#ticketID#
。例如,使用与上述相同的票证ID:
<input name="quantity_1" ...>
<input name="quantity_22" ...>
<input name="quantity_45" ...>
<input name="quantity_16" ...>
获得结果后,有several ways to generate a grand total。最简单的方法是在循环之前初始化变量,然后在迭代时递增它。使用查询票证ID从FORM范围中获取数量值:
<cfset grandTotal = 0>
<cfoutput query="yourQuery">
<!--- extract quantity value --->
<cfset currQuantity = FORM["quantity_"& yourQuery.ticketID ]>
... display price ...
<cfset grandTotal += val(yourQuery.ticketPrice * currQuantity )>
</cfoutput>
GrandTotal <cfoutput>#grandTotal#</cfoutput>
答案 2 :(得分:0)
我建议丢弃整个动态命名的查询。
<cfset total = 0>
<CFLOOP LIST="#form.fieldnames#" INDEX="item">
<cfquery datasource="outertixdb" name="getticket">
select * from tickets
where ticketid = <cfqueryparam cfsqltype="cf_sql_varchar" value="#item#">
</cfquery>
<cfset total += getticket.ticketprice />
<cfoutput query="getTicket">
#ticketname#: #dollarformat(ticketprice)# × #form[item]#
= #dollarformat(val(ticketprice * form[item]))#<br/>
</cfoutput>
</cfloop>
根据需要输出总数