表单提交Firefox和Google Chrome(ColdFusion)的差异
几天前,我编写了一个小的Coldfusion 9脚本,但在提交表单后,查询将无法在Firefox中运行。Google Chrome上的一切都很好,但Firefox上的一切都不好 我试着用谷歌搜索它,但我找不到任何与这个问题相关的东西。如果你在读了这篇文章后有什么不清楚的地方,尽管问吧,我会尽量向你解释得更好 该脚本可在以下位置找到:表单提交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
您好,我猜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