【问题标题】:Why is Firefox removing / ignoring hidden input values from an HTML form?为什么 Firefox 从 HTML 表单中删除/忽略隐藏的输入值?
【发布时间】:2015-10-08 07:40:40
【问题描述】:

我有一个 HTML 表单,它使用隐藏输入来管理 PHP 处理脚本中的行为。

在浏览器测试中我发现该表单在 Chrome 和 IE 中运行良好,但在 Firefox 中存在问题。

Firefox 浏览器(使用 39.0)删除隐藏的输入值。他们完全消失了,只剩下value=""。这反过来又弄乱了我的 PHP。

我已经广泛搜索了有关此问题的信息,但一无所获。

为什么 Firefox 会删除(或忽略)我的 HTML 表单中隐藏的输入值?

在原始文件中

在 Chrome 开发者工具中

在 Firefox 检查器中

更新(基于发布的 cmets)

浏览器测试。该表单已在所有主要浏览器桌面和移动版本上进行了测试。该表单可在所有浏览器(包括 Firefox 移动版)上完美运行,但无法在 Firefox 桌面版 (39.0) 中完全正常运行,因为隐藏的输入值已被删除。

更新 2

重新启动并重新安装 Firefox 未能解决问题。

更新 3

已删除所有客户端脚本并检查 HTML 验证(无错误)。问题仍然存在。

更新 4

这似乎与 Firefox 缓存数据和处理 POST 请求的方式有关。

当我“清除所有历史记录”(包括 cookie、缓存等)时,表单会按预期工作......一次。

在所有后续提交中,value 属性的值为空,并且没有数据传递给 PHP,直到我再次“清除所有历史记录”。

这在其他浏览器中不会发生。

【问题讨论】:

  • 对不起,但我怀疑 FireFox 真的会像这样删除输入字段值。正如您自己所说:互联网上没有任何证据。所以也许你应该寻找其他解释......也许有一些客户端脚本会改变标记?也许有一些服务器端脚本会对浏览器识别做出反应?属性顺序也发生变化的事实表明,内容已通过中间的某些处理步骤重新创建
  • 这怎么可能是“搞砸了你的 php”? php 是脚本服务器端;它的运行独立于任何浏览器解释。这些工具无关紧要。
  • @nomistic 它可能会弄乱 PHP,因为它期望该字段存在。当一个字段为空时,它根本不会发送到服务器。我可以看到这是一个问题。
  • 我检查了 39 - 一切正常。这是所有的代码?您可以在 jsfiddle.net? 中重现此行为?
  • @Anonymous 很抱歉有所不同,但此代码的解释是客户端的,并且会在代码发送到浏览器之后发生。正如 arkascha 所说,某些客户端工具可能正在发生一些事情。它不可能是 php。

标签: php html forms firefox hidden-field


【解决方案1】:

我遇到了完全相同的问题。没有使用客户端脚本。我将隐藏字段嵌套在一个 div 中,然后全部工作。

这行得通:

<div>
<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>"name="_token">
</div>

这复制了帖子中描述的确切行为:

<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>"name="_token">

上述任一变体都适用于 Chrome。问题仅出现在桌面版 Firefox 63.0.1(64 位)上。

更新 (2018-11-15) 实际上,在我的情况下,问题是 HTML 格式错误(名称属性之前没有空格)。看来 Chrome 可以容忍这一点,而 Firefox 则不太容忍。除非清除缓存,否则 Firefox 会提交一次该值,然后再提交一次。更正 HTML 更正了 Firefox 遇到的这种古怪行为。更正的 HTML:

<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>" name="_token">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2011-10-12
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多