表单提交Firefox和Google Chrome(ColdFusion)的差异

表单提交Firefox和Google Chrome(ColdFusion)的差异,firefox,google-chrome,coldfusion,Firefox,Google Chrome,Coldfusion,几天前,我编写了一个小的Coldfusion 9脚本,但在提交表单后,查询将无法在Firefox中运行。Google Chrome上的一切都很好,但Firefox上的一切都不好 我试着用谷歌搜索它,但我找不到任何与这个问题相关的东西。如果你在读了这篇文章后有什么不清楚的地方,尽管问吧,我会尽量向你解释得更好 该脚本可在以下位置找到: 您好,我猜FF和Chrome处理这一行生成的表单元素的方式不同: <cfinput type='image' src='http://linehotel.or

几天前,我编写了一个小的Coldfusion 9脚本,但在提交表单后,查询将无法在Firefox中运行。Google Chrome上的一切都很好,但Firefox上的一切都不好

我试着用谷歌搜索它,但我找不到任何与这个问题相关的东西。如果你在读了这篇文章后有什么不清楚的地方,尽管问吧,我会尽量向你解释得更好

该脚本可在以下位置找到:


您好,

我猜FF和Chrome处理这一行生成的表单元素的方式不同:

<cfinput type='image' src='http://linehotel.org/c_images/bot_buy.png' name='submit' value='Koop deze badge nu'>

看起来您的代码正在检查form.submit是否存在,因此我将查看此标记生成的源代码


另一件要尝试的事情是安装、运行并使用它捕获Chrome和FF提交的内容,并将两者进行比较,特别是查看请求部分的WebForms选项卡。如果与浏览器相关,则会有差异。

我猜FF和Chrome处理这一行生成的表单元素的方式不同:

<cfinput type='image' src='http://linehotel.org/c_images/bot_buy.png' name='submit' value='Koop deze badge nu'>

看起来您的代码正在检查form.submit是否存在,因此我将查看此标记生成的源代码


另一件要尝试的事情是安装、运行并使用它捕获Chrome和FF提交的内容,并将两者进行比较,特别是查看请求部分的WebForms选项卡。如果与浏览器相关,则会有不同。

罪魁祸首有两个:

<cfinput type='image'...>

Firefox不会在表单post中返回图像的名称。它将只返回图像贴图的X和Y值。您可能需要做的是将
标记替换为HTML
按钮,并使用CSS将图像应用于它。您甚至可以考虑检查其他表单变量以代替提交按钮。

罪魁祸首是两个折叠:

<cfinput type='image'...>

Firefox不会在表单post中返回图像的名称。它将只返回图像贴图的X和Y值。您可能需要做的是将
标记替换为HTML
按钮,并使用CSS将图像应用于它。您甚至可以考虑检查其他表单变量以代替提交按钮。

您可以将脚本保留原样,并替换

<cfif IsDefined('form.submit')>



检查表单是否已提交。

您可以保留脚本原样并替换

<cfif IsDefined('form.submit')>



检查表单是否已提交。

查看您的代码,您可能还希望查看cfqueryparam标记以帮助防止sql注入,并且您可能希望在cfquery之外而不是在其中进行计算。。。例如:

<cfquery name = "pay" datasource = "#DSN#">
UPDATE users
SET bots=#user.bots#-1
WHERE id=#user.id#
</cfquery>

更新用户
设置机器人=#user.bots#-1
其中id=#user.id#
这样可能更好:

<input type="image"...
submit.x: mouseclick x coords.
submit.y: mouseclick y coords.
<Cfset xBots=user.bots-1>

<cfquery name = "pay" datasource = "#DSN#">
 UPDATE users
 SET bots=<cfqueryparam cfsqltype="cf_sql_integer" value="#xBots#">
 WHERE id=<cfqueryparam cfsqltype="cf_sql_integer" value="#user.id#">
 </cfquery

更新用户
设置机器人=
何处id=

查看您的代码,您可能还希望查看cfqueryparam标记以帮助防止sql注入,并且您可能希望在cfquery之外而不是在其中进行计算。。。例如:

<cfquery name = "pay" datasource = "#DSN#">
UPDATE users
SET bots=#user.bots#-1
WHERE id=#user.id#
</cfquery>

更新用户
设置机器人=#user.bots#-1
其中id=#user.id#
这样可能更好:

<input type="image"...
submit.x: mouseclick x coords.
submit.y: mouseclick y coords.
<Cfset xBots=user.bots-1>

<cfquery name = "pay" datasource = "#DSN#">
 UPDATE users
 SET bots=<cfqueryparam cfsqltype="cf_sql_integer" value="#xBots#">
 WHERE id=<cfqueryparam cfsqltype="cf_sql_integer" value="#user.id#">
 </cfquery

更新用户
设置机器人=
何处id=

另一方面,我强烈建议您查看
cfqueryparam
标签,将您的代码放在另一个站点上是没有用的。当链接不再工作时会发生什么?堆栈溢出的部分目的是作为未来读者的答案库,而不仅仅是帮助您解决当前的问题。另一方面,我强烈建议您查看
cfqueryparam
标记,将您的代码放在另一个站点上在这里是没有用的。当链接不再工作时会发生什么?堆栈溢出的部分目的是作为未来读者的答案库,而不仅仅是帮助您解决当前的问题。在这种情况下,与大多数情况一样,最好使用structKeyExists而不是isDefined。。。这样一来,Chrome和FF都将确定form.submit是否存在。StructKeyExists是更好的选择,我同意。无论如何,FF中的表单结构中不存在“提交”。在FF中,存在一个名为“submit.x”的键和另一个名为“submit.y”的键。另请参见:在这种情况下,与大多数情况一样,最好使用structKeyExists而不是isDefined。。。这样一来,Chrome和FF都将确定form.submit是否存在。StructKeyExists是更好的选择,我同意。无论如何,FF中的表单结构中不存在“提交”。在FF中,存在一个名为“submit.x”的键和另一个名为“submit.y”的键。另请参见:这非常有用!非常感谢。那真的很有帮助!非常感谢。请更详细地介绍isdefined与cgi.request\U方法之间的区别。我想知道
@JamesMohler是否有问题,我不这么认为。该标记只是让HTML
更详细地了解isdefined与cgi之间的区别。request\u方法会有所帮助。我想知道
@JamesMohler是否有问题,我不这么认为。该标记只是生成一个HTML