0

奇怪的问题...我的应用程序 ( coldfusion8/MySQL 5.0.88) 运行良好,除非用户尝试使用 IE6 访问它。这会引发以下错误:

 Element PL_SELLERS is undefined in VARIABLES

我无法重现,因为我可以测试的所有浏览器(包括 IE8)都不会抛出此错误。

我知道问题出在以下代码段中:

<cfif Session.reload_user EQ "true" OR ( Len(Session.pricelists) EQ 0 OR Len(Session.pl_sellers) EQ 0)>
    <cfquery datasource="#Session.datasource#" name="q_preislisten">
        ... query ...
    </cfquery>
    <cfif q_preislisten.recordcount NEQ 0>
        <cfset variables.pl_sellers = "">
        <cfloop query="q_preislisten">
            <cfset variables.pl_sellers = variables.pl_sellers & q_preislisten.iln_verkaeufer & ',';>
        </cfloop>
    </cfif>
    <cfif len(variables.pl_sellers) NEQ 0 )>
        <cfset variables.pl_sellers = Left(variables.pl_sellers, len(variables.pl_sellers)-1)>
        <cfset Session.pl_sellers = variables.pl_sellers>
        <cfset Session.reload_user = "false">
    </cfif>
<cfelse>
    <cfset variables.pl_sellers = Session.pl_sellers>
</cfif>

所以我的问题是:
在什么情况下可以variables.pl_sellers不确定?

我会将初始声明移到<cfset variables.pl_sellers = "">整个 if 语句之外,因此它始终至少是一个空字符串。我能想到的另一个原因是检查len(variables.pl_sellers)不在 recordcount-if 语句之外。还有其他我想念的东西吗?

谢谢!

4

3 回答 3

3

如果您的preislisten.recordcount is 0, 那么当它检查下一个 IF 块时,它将是未定义的。

于 2012-10-23T16:39:26.840 回答
1

一定爱IE6!不是您问题的真正答案,但我会添加IsDefined()检查,以便您至少可以优雅地处理错误。

<cfif Session.reload_user EQ "true" OR ( Len(Session.pricelists) EQ 0 OR Len(Session.pl_sellers) EQ 0)>
    <cfquery datasource="#Session.datasource#" name="q_preislisten">
        ... query ...
    </cfquery>
    <cfif q_preislisten.recordcount NEQ 0>
        <cfset variables.pl_sellers = "">
        <cfloop query="q_preislisten">
            <cfset variables.pl_sellers = variables.pl_sellers & q_preislisten.iln_verkaeufer & ',';>
        </cfloop>
    </cfif>
    <cfif IsDefined("variables.pl_sellers") AND len(variables.pl_sellers) NEQ 0 )>
        <cfset variables.pl_sellers = Left(variables.pl_sellers, len(variables.pl_sellers)-1)>
        <cfset Session.pl_sellers = variables.pl_sellers>
        <cfset Session.reload_user = "false">
    <cfelse>
        <!--- handle the error here --->
    </cfif>
<cfelse>
    <cfset variables.pl_sellers = Session.pl_sellers>
</cfif>
于 2012-10-23T16:52:38.873 回答
0

如上所述,如果查询没有返回任何行,则不会创建 .variable。

于 2012-10-23T16:50:45.570 回答