シンプルなColdFusionスクリプトはIEで動作しますが、Firefoxでは動作しませんか?
-
02-07-2019 - |
質問
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)、すべてが正常に戻りました。これが他の人にも役立つことを願っています。