1

我不确定我的标题是否很好地解释了这一点。坦率地说,我不确定如何用语言来表达,但这里是:

我正在从另一个页面上动态创建的表单字段中捕获变量,这些字段已提交到包含以下代码的页面。到目前为止,一切都按我的意愿进行。我正在获取动态命名的表单字段。现在我需要将小计金额加在一起以创建总计。不幸的是,由于它们的动态特性,我无法弄清楚如何使各个总数脱离循环,因此我可以对最终数字进行数学计算。

下面的这部分代码生成小计,我需要能够将所有这些加在一起以获得总计,但我不知道如何:

#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>

4

3 回答 3

4

您需要使用以下格式设置您的name属性:cfquery

<cfquery datasource="outertixdb" name="#getticket[item]#">

要处理总数,您首先需要一个变量cfloop

<cfset total = 0 />

然后,在循环内,您只需将票价加到总价中

<cfset total = total + getticket[item].ticketprice />

此外,您应该cfqueryparam在查询中使用。你可以在这里阅读更多关于它的信息

最后,如果你不需要tickets表中的所有数据,不要使用'select *..',只拉包你需要的数据。

于 2013-12-05T13:42:05.487 回答
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" ...>

获得结果后,有几种方法可以生成总计。最简单的方法是在循环之前初始化一个变量,然后在迭代时递增它。使用查询工单 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>
于 2013-12-05T13:45:48.130 回答
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)# &times; #form[item]# 
    = #dollarformat(val(ticketprice * form[item]))#<br/>
</cfoutput>
</cfloop>

根据需要输出您的总数

于 2013-12-05T14:06:02.433 回答