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>
... 查询
但如果这是问题所在,它总是会失败。浏览器版本不会有什么区别。尽管如果是这样的问题,它总是会失败。浏览器版本不会有什么不同。