5

我被困住了,需要重新审视这个问题,拜托。

我正在使用其他人的意大利面条代码,该代码不再存在并且有一段时间弄清楚他们正在评估什么。

<cfset surveyCount = 0>
<cfloop query="surveys">
    <cfif evaluate("defaultReport" & ID)>
        <cfset surveyCount = surveyCount + 1>
    </cfif>
</cfloop>  

在查询转储中,我看到了 9 条记录,这是我所期望的,但是因为评估失败,所以surveyCount 没有增加。我没有看到任何列defaultReport。在我与 CF 合作的 15 年中,我一直避免使用 evaluate(),现在当我需要分析它时,我完全不知所措。有人可以提供任何指导吗?

添加了 CFDump 图像(出于隐私和安全考虑,一些列名称已被删除): 在此处输入图像描述

更新一:这个文件有很多 cfinclude 语句和很少的代码格式。结果,我忽略了一些 cfinclude 语句。我发现了以下内容。我仍在寻找,但想在挖掘时记录下来。

<cfloop query="surveys"> <cfscript> variables["defaultReport" & ID] = evaluate(thisAssociation & "Price"); </cfscript> </cfloop>

更新二:转储变量范围,我确实确认了我正在寻找的变量(找到我在更新中发布的查询我也有帮助)。:)
在此处输入图像描述

4

2 回答 2

5

您需要在查询之外查找变量。此变量的名称为default#ID#。它可能会被调用。

variables.default#ID#
form.default#ID#
url.default#ID#
request.default#ID#
attributes.default#ID#

等等

基本上,ColdFusion 将遍历每个范围,直到找到一些东西。(不,这不是一个好方法)

如果你必须清理它,我建议不要使用这种模棱两可的方法。简而言之,没有真正的方法可以知道它正在评估什么。

于 2018-02-09T04:42:38.803 回答
5

他们想要做的是增加surveyCount,但前提是这件事:evaluate("defaultReport" & ID)评估为true

从您的查询转储图片中,ID 看起来像是144,145等数字...

在这种情况下,您可以将 atevaluate("defaultReport" & ID)视为类似defaultReport144,defaultReport145等...(这些是在代码中某处设置的变量)。

所以代码:

<cfif evaluate("defaultReport" & ID)>
    <cfset surveyCount = surveyCount + 1>
</cfif>

变为(对于 144 的 ID,查询循环中的第一个)

<cfif defaultReport144>
    <cfset surveyCount = surveyCount + 1>
</cfif>

等等......对于其他ID

因此,请在您的代码中搜索 , 等变量defaultReport144设置defaultReport145为的位置true or false (0 or 1)

就像是:

<cfset defaultReport144 = true />

或者他们可能使用一些计算结果为真或假的表达式,例如:

<cfset defaultReport144 = [some expression] />

如果找不到,则可能是在defaultReport...设置这些变量的地方更改或删除了代码。

ColdFusionevaluate()文档:
https ://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f4e.html

于 2018-02-09T05:30:39.653 回答