Frage

Ich habe ein sehr einfaches Stück Skript, das den Status eines Elements in einer MySQL-Datenbank ändert - es in IE7 funktioniert gut, aber wenn ich es in Firefox versuchen, es sieht aus wie es funktioniert, aber hat nicht ... welche ist äußerst merkwürdig.

Der Code ist sehr einfach - zuerst bekomme ich die Details des Datensatzes ich suche:

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

Dies funktioniert gut, wenn ich die Ergebnisse werfen, es ist nur der Inhalt des Datensatzes, wie erwartet. Also dann verwende ich eine if-Anweisung den ‚aktiven‘ Bereich von eins auf null zu ändern oder umgekehrt.

<!--- 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>

Ich kann keinen Grund auch immer für diese sehe nicht ... zu arbeiten, und in der Tat, in IE7 es perfekt funktioniert ...

Was passiert ist, nachdem das Skript ausgeführt wird, der Browser auf die Seite, die alle diese Datensätze anzeigt zurückgeht. Für jeden Datensatz, wenn das Feld ‚bActive‘ auf ‚1‘, wird es das Wort ‚Aktiv‘ angezeigt, und wenn es auf ‚Null‘ gesetzt ist, wird es ‚Deaktiviert‘ angezeigt werden soll. Einfach genug.

Wenn ich das Skript ausführen, einen Datensatz zu deaktivieren, Firefox zeigt tatsächlich das Wort ‚behindert‘ als erwartet, aber der Datenbank-Eintrag nicht ändert!

Ich bin ratlos ... wie kann serverseitigen Code funktionieren in einem Browser und in einem anderen nicht?!

War es hilfreich?

Lösung 2

fand ich die Ursache des Problems ... Firebug.

Ich habe nicht die geringste Ahnung, was Firebug denkt, dass es tut, wenn ich den ‚cflocation‘ tag aus dem Skript (derjenige, der den Benutzer zurück auf die Übersichtsseite nimmt) entfernen, dann funktioniert es gut. Aber wenn ich es halten in, scheint Firebug die Funktion wieder laufen, bevor der Browser auf der Übersichtsseite weitergeleitet werden.

Es gibt keinen Grund dafür, dies zu tun. Un-bloody-belivable.

Zumindest wird es nicht auf den Maschinen der Kunden geschehen.

Andere Tipps

Sind Sie 100% sicher, dass der Datenbank-Eintrag nicht ändern? Sie könnten sich diese auswirken, wenn firefox Sie Skript zweimal aufruft, einmal, bevor die Seite gerendert wird und einmal nach.

So das Produkt auf disabled gesetzt wird, dann, nachdem die Seite an den Browser gesendet wird wieder aktualisiert wird (und wie es bereits deaktiviert ist, es wieder aktiviert wird).

Wenn Sie ein letztes Aktualisierungsfeld auf die Datenbank und Update hinzufügen, die jedes Mal, wenn Ihr Produkt geändert wird dann würden Sie in der Lage sein zu sagen, ob dies der Fall ist.

EDIT:. Unten auf die Kommentare reagiert, eine schnelle + schmutzig fix wäre die letzte Aktualisierung Zeitstempel überprüfen Sie zuerst, wenn ihr mit in n Sekunden der aktuellen Zeit, um das Update entlassen

Haben Sie irgendwelche Plug-Ins in Firefox, die vielleicht wieder den Aufruf der Seite? vielleicht für dev Zwecke? ein einfacher Test, um zu sehen, ob seine Ihr Skript oder eine Marotte in firefox wäre Ihre get url in eine Form mit einer post-Methode zu ändern, da der Browser / Plug-in sollte eine Post-Anforderung nicht erneut aufrufen.

Der Code, den Sie geschrieben haben, ist nicht die Ursache für den Fehler, weil es alle Server-seitigen Code ist - es gibt nichts auf dem Client geschieht dort

.

Ich würde einschalten CF Debuggen (einschließlich Datenbank-Aktivität) und halte einen Tag direkt nach dem schließenden Tag, und vor jeder Umleitung zurück zur Produktansicht Seite. Führen Sie den Code und sehen Sie die SQL-Debug-Ausgabe.

Meine Vermutung ist, dass, wenn Firefox den Codeblock mit den Abfragen mit genannt einfach nicht bekommen.

Dies kann ein Browser-Caching Problem sein. Es gibt keine Möglichkeit, dass gerade CF Code vom Browser verwendet werden betroffen sein könnten. Was passiert, wenn Sie die Seite aktualisieren, wo Sie die Produkte sind angezeigt wird? Sie müssen auch in der Datenbank suchen direkt zu sehen, ob der Wert ändert oder nicht.

Auf einem Bit einer Tangente, können Sie die Notwendigkeit eine if-Anweisung beseitigen überhaupt mit einer wenig einfachen Mathematik.

<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>

Versuchen Sie das Semikolon am Ende Ihrer WHERE-Klauseln in SQL-Code zu entfernen.

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

all diese unterschiedlichen Antworten, und keiner von ihnen für mich gearbeitet. Ich musste in ein anderes Forum gehen, wo jemand sagte, es die Skype-Erweiterung Addon in Firefox ist die Coldfusion-Datenbanken verursacht verrückt oder nicht Funktion zu gehen. Ich deinstallierte die Skype-Erweiterung (danke, Skype) und alles war wieder normal. Hoffe, dass dies für jemanden arbeitet sonst auch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top