Variables 在下面的Coldfusion代码段中,何时可以取消定义变量x?

Variables 在下面的Coldfusion代码段中,何时可以取消定义变量x?,variables,coldfusion,undefined,Variables,Coldfusion,Undefined,奇怪的问题。。。我的应用程序(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

奇怪的问题。。。我的应用程序(
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>

... 查询
那么我的问题是:
在什么情况下
变量.pl\u sellers
可以不定义

我将把inital声明
移到整个if语句之外,这样它将始终至少是一个空字符串。我可以想到的另一个原因是检查
len(variables.pl\u sellers)
在recordcount if语句之外。我还缺什么东西吗


谢谢

如果您的
preislisten.recordcount为0,则当它检查下一个If块时,它将未定义。

如果您的
preislisten.recordcount为0,则当它检查下一个If块时,它将未定义。

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

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

我喜欢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>

... 查询

一定要喜欢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>

... 查询

但如果这是问题所在,它总是会失败。浏览器版本不会有什么区别。尽管如果是这样的问题,它总是会失败。浏览器版本不会有什么不同。