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ステートメントの範囲外であるかどうかのチェックについて考えることができるもう1つの理由。他に足りないものはありますか?

ありがとう!

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 に答える