Mysql 简单的ColdFusion脚本可以在IE中工作,但不能在Firefox中工作?

Mysql 简单的ColdFusion脚本可以在IE中工作,但不能在Firefox中工作?,mysql,firefox,coldfusion,internet-explorer-7,Mysql,Firefox,Coldfusion,Internet Explorer 7,我有一个非常简单的脚本,可以更改MySql数据库中某个项目的状态-它在IE7中运行良好,但如果我在Firefox中尝试,它看起来很有效,但没有。。。这是非常奇怪的 代码非常简单-首先我得到了我要查找的记录的详细信息: <cfscript> // Get the Product Attribute details Arguments.qGetProductAttribute = Application.cfcProducts.getProductAttributes(Arguments

我有一个非常简单的脚本,可以更改MySql数据库中某个项目的状态-它在IE7中运行良好,但如果我在Firefox中尝试,它看起来很有效,但没有。。。这是非常奇怪的

代码非常简单-首先我得到了我要查找的记录的详细信息:

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

//获取产品属性详细信息
Arguments.qGetProductAttribute=Application.cfcProducts.getProductAttributes(Arguments.ipProductAttributeId);
这很好,如果我转储结果,它只是记录的内容。然后我使用if语句将“active”字段从一改为零,反之亦然

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

更新TBLPProductAttributes
设置活动=
其中IPProductAttributeId=;
更新TBLPProductAttributes
设置活动=
其中IPProductAttributeId=;
我看不出这有什么不起作用的理由。。。事实上,在IE7中,它可以完美地工作

运行此脚本后,浏览器将返回显示所有这些记录的页面。对于每条记录,如果'bActive'字段设置为'1',它将显示'Active'一词,如果它设置为'zero',它将显示'Disabled'。 很简单

如果我运行脚本来禁用一条记录,Firefox实际上会按预期显示“disabled”一词,但数据库记录不会改变


我不知所措。。。服务器端代码如何在一个浏览器中正常工作,而在另一个浏览器中却无法正常工作

您是否100%确定数据库记录不会更改?如果firefox两次调用您的脚本,一次在页面呈现之前,一次在页面呈现之后,您可能会受到这种影响

因此,产品设置为disabled,然后在页面发送到浏览器后,它会再次更新(由于它已经被禁用,所以会重新启用)

如果您在数据库中添加了last update字段,并在每次修改产品时更新该字段,那么您将能够判断是否是这种情况

编辑:响应下面的评论,一个快速+肮脏的修复方法是首先检查上次更新的时间戳,如果它在当前时间的n秒内出现,则关闭更新


firefox中是否有可能重新调用页面的插件?也许是为了开发目的?一个简单的测试,看看这是您的脚本还是firefox中的一个怪癖,就是使用post方法将get url更改为表单,因为浏览器/插件不应该重新调用post请求。

尝试删除SQL代码中WHERE子句末尾的分号

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

这可能是浏览器缓存问题。使用的浏览器不可能影响直接的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>

更新TBLPProductAttributes
设置
活动=
哪里
IPProductAttributeId=;

您发布的代码不是错误的原因,因为它都是服务器端代码-客户端上没有发生任何事情

我会打开CF调试(包括数据库活动),并在结束标记之后、重定向回产品视图页面之前粘贴一个标记。运行代码并查看SQL调试输出


我的猜测是,当使用Firefox时,包含查询的代码块不会被调用。

我找到了问题的原因。。。萤火虫

我一点也不知道Firebug认为它在做什么,如果我从脚本中删除“cflocation”标记(将用户带回摘要页面的标记),那么它就可以正常工作。但是,如果我将其保留,Firebug似乎会在将浏览器转发到摘要页面之前再次运行该功能

它没有理由这么做。 难以置信


至少这不会发生在客户的机器上。

所有这些不同的答案,都不适合我。我不得不去另一个论坛,有人说是Firefox中的Skype扩展插件导致ColdFusion数据库发疯或无法正常工作。我卸载了Skype扩展(谢谢你,Skype),一切都恢复正常。希望这也适用于其他人。

没错,你是。。。我添加了一个最后更新的字段,它确实做了更改。。。但我不知道FF会两次点击脚本,也不明白为什么会。。。有没有办法阻止这种情况发生?我以前在FF中看到过一个模糊的问题,当它偶然发现一个它无法识别的字符,需要在不同的字符集中重新显示页面,并将重新提交页面来执行此操作。您没有任何与声明的doctype大不相同的奇怪字符吗?hmmmmmmmm。。。。。我不知道。。。我在生成的页面上使用了£符号,这在过去是有问题的。。。但不在实际进行数据库调用的页面上。。。即使它重新显示结果页面,也不会引起问题。对更改状态的脚本的请求是GET还是POST?如果是GET,尝试将其更改为POST,看看是否有帮助。我过去在显示时遇到问题,所以我使用£;(&)#163; 这不是表格,只是一页。。。(所以是get,对吗?)该页面从URL获取记录ID,调用CF函数更改记录,然后使用CFLOCATION返回记录列表页面。我必须同意——在H-E-Double Hockey Sticks中,浏览器不会影响服务器端代码。您可能遇到缓存问题,或者与启动此过程的表单或链接有关。我也同意。如果这是一个服务器端问题,我很肯定我能解决它。我不明白FireFox在做什么来运行这段代码两次。切线是一条直线