シンプルなColdFusionスクリプトはIEで動作しますが、Firefoxでは動作しませんか?

StackOverflow https://stackoverflow.com/questions/138607

質問

MySqlデータベース内のアイテムのステータスを変更する非常に簡単なスクリプトがあります-IE7では正常に動作しますが、Firefoxで試してみると、動作しているように見えますが、動作していません...これは非常に奇妙です。

コードは非常にシンプルです-最初に、探しているレコードの詳細を取得します:

<cfscript>
// Get the Product Attribute details
Arguments.qGetProductAttribute = Application.cfcProducts.getProductAttributes(Arguments.iProductAttributeID);
</cfscript>

これは正常に機能しています。結果をダンプすると、期待どおりのレコードの内容になります。そこで、ifステートメントを使用して、「アクティブ」フィールドを1からゼロ、またはその逆に変更します。

<!--- If Product Attribute is active, mark as inactive --->
<cfif Arguments.qGetProductAttribute.bActive EQ 0>
    <cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET     bActive = <cfqueryparam value="1" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
    </cfquery>

<!--- Else if Product Attribute is inactive, mark as active --->
<cfelseif Arguments.qGetProductAttribute.bActive EQ 1>
    <cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET     bActive = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
    </cfquery>
</cfif>

これが機能しない理由はまったくわかりません...実際、IE7では完全に機能します...

このスクリプトの実行後、ブラウザはこれらのレコードをすべて表示するページに戻ります。 「bActive」フィールドが「1」に設定されている場合、各レコードに対して「Active」という単語が表示され、「ゼロ」に設定されている場合は「無効」が表示されます。 簡単です。

スクリプトを実行してレコードを無効にすると、Firefoxは実際には「無効」という単語を表示しますが、データベースレコードは変更されません!

途方に暮れています...サーバー側のコードは、あるブラウザーでは正常に機能し、別のブラウザーでは機能しないのですか?

役に立ちましたか?

解決 2

問題の原因が見つかりました... Firebug。

Firebugが何をしていると考えているのか少しもわかりません。スクリプトから 'cflocation'タグ(ユーザーを概要ページに戻すタグ)を削除すると、正常に機能します。しかし、それを保持すると、Firebugはブラウザーを要約ページに転送する前に関数を再度実行するようです。

これを行う理由はありません。 血まみれの信じられない。

少なくともクライアントのマシンでは発生しません。

他のヒント

データベースレコードが変更されないことを100%確信していますか? firefoxがスクリプトを2回呼び出すと、ページがレンダリングされる前と後の1回、この影響を受ける可能性があります。

製品は無効に設定され、ページがブラウザに送信された後、再度更新されます(すでに無効になっているため、再び有効になります)。

最後の更新フィールドをデータベースに追加し、製品が修正されるたびに更新する場合、これが該当するかどうかを確認できます。

編集:以下のコメントに応じて、最初の最後の更新タイムスタンプをチェックし、現在の時刻のn秒以内に更新が却下された場合、簡単な+汚い修正が行われます。

ページをリコールする可能性のあるプラグインがFirefoxにありますか?おそらく開発目的ですか?ブラウザまたはプラグインがpostリクエストをリコールしないように、スクリプトまたはfirefoxの動作がgetメソッドをpostメソッドを含むフォームに変更するかどうかを確認する簡単なテストです。

投稿したコードはすべてサーバー側のコードであるため、エラーの原因ではありません-クライアントでは何も起きていません。

CFデバッグ(データベースアクティビティを含む)を有効にし、終了タグの直後、および製品ビューページにリダイレクトする前にタグを貼り付けます。コードを実行し、SQLデバッグ出力を確認します。

推測すると、Firefoxを使用している場合、クエリを含むコードブロックは呼び出されません。

これはブラウザのキャッシュの問題である可能性があります。使用されているブラウザの影響により、ストレートCFコードが影響を受ける可能性はありません。製品を表示しているページを更新するとどうなりますか?また、データベースを直接調べて、値が変化しているかどうかを確認する必要があります。

ちょっとした接線で、少し簡単な数学でifステートメントの必要性をまったくなくすことができます。

<cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET
         bActive = <cfqueryparam value="#val(1 - Arguments.qGetProductAttribute.bActive)#" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   
        iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
</cfquery>

SQLコードのWHERE句の末尾にあるセミコロンを削除してみてください。

WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;

これらのさまざまな答えはすべて、私には役に立たなかった。別のフォーラムに行く必要がありました。そこでは、ColdFusionデータベースがおかしくなったり機能しなくなったりする原因がFirefoxのSkype Extension Addonであると誰かが言ったのです。 Skype拡張機能をアンインストールし(ありがとう、Skype)、すべてが正常に戻りました。これが他の人にも役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top