【问题标题】:How to POST form data from restored session?如何从恢复的会话中发布表单数据?
【发布时间】:2017-05-30 02:33:45
【问题描述】:

我使用名为“会话管理器”的 Firefox 插件来保存和恢复会话。我有简单的 php + html 表单:

<form id="form_id" enctype="multipart/form-data" method="post" action="upload.php">
    <input id="name$key" type="text" placeholder="Name" name="name[]" value="$name">
    <input type="file" name="fileToUpload[]" id="fileToUpload$key">
    <input id="submit" name="submit" type="submit" value="Submit">
</form>

当我使用“会话管理器”恢复表单输入数据时,我可以看到我需要的所有数据。当我单击“提交”按钮时,数据为空$_POST

我该怎么做才能不丢失这些数据?

也许使用一些 JQuery 或session_start(); $_SESSION

【问题讨论】:

  • 这里没有php/jquery,检查错误
  • 你能把upload.php的内容贴出来吗?这将帮助我们调试您的代码..
  • @RunnyYolk upload.php 很简单 - echo "&lt;pre&gt;";var_dump($_POST);var_dump($_FILES);echo "&lt;/pre&gt;";exit(); 如果我在没有“会话管理器”插件的情况下发布一切正常,但是当我使用“会话管理器”恢复会话时,发布数据为空。

标签: php jquery html session firefox-addon


【解决方案1】:

如果 html &lt;form&gt; 使用属性 enctype="multipart/form-data" 设置,Firefox 附加组件“会话管理器”似乎无法正常工作。如果您想通过POST 发送一些文件,请使用&lt;form&gt; 属性enctype="application/x-www-form-urlencoded" 和php copy()。那不是干净的解决方案。也许enctype="multipart/form-data" 可能有其他解决方案,也许accept-charset 形式的一些过期可以给你更好的结果。

【讨论】:

  • 感谢您发布您的解决方案 +1
【解决方案2】:

Firefox 中的会话管理器插件与 PHP 会话完全无关。同一个词,完全不同的意思。

Firefox 会话是您的浏览器选项卡和它们正在访问的网站。 PHP 会话与特定网站上的用户会话相关。

您在表单中看到的“已保存”数据很可能只是仅保存在 Firefox 中的字段数据,其唯一目的是加快数据重新输入的速度。它实际上还没有“在”表单字段中,而是保存在 Firefox 中(仅在网站上,而不是在网站上),以便更容易重新输入频繁键入的数据。

当您失去与网站的连接时,您会丢失在字段中输入的数据。刷新页面会丢失在字段中键入的数据。没有解决方法,就是这样。

如果您还有其他问题,请在此答案下方的 cmets 中提问。

编辑:

重新思考,可能有可能使用 javascript/jQuery(请,jQuery)解决方案来实现某种解决方案,该解决方案涉及检测何时退出字段 (blur()) 并随后抓取数据并保存在 localStorage .

参考资料:

https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API

http://www.w3schools.com/html/html5_webstorage.asp

When is localStorage cleared?

What is the max size of localStorage values?

【讨论】:

  • 没有插件一切正常,发布没有问题。您正确地认为该数据实际上并未“保存”在表单字段中。也许有一些 ajax 代码可以用这些数据重新初始化 dom?从逻辑上讲,如果我在表单中看到输入的数据,我无法相信我无法发送正确的 POST 数据。
  • 您可能正在寻找一些客户端代码,例如 localStoragesee this also (localStorage 类似于 Cookie 版本 2 - 更易于使用,每个网站最多可容纳 10Mb ,截至 FF45+)
  • 我发现如果我不发送文件,由enctype="multipart/form-data" 引起的主要错误,“会话管理器”运行良好。但我不知道这是什么原因。我尝试更改编码accept-charset="UTF-8",但它对我不起作用。
  • 通过删除enctype="multipart/form-data" 并使用默认enctype="application/x-www-form-urlencoded" 解决了这个问题。然后我使用 php copy() 而不是 move_uploaded_file()。感谢您的合作。
  • 感谢您发布您的解决方案。请将其作为答案发布并选择它作为正确答案。我的答案将作为未来读者检查的内容,但您的答案是解决方案。请在发布您的答案后回复此评论,并保证您至少获得一个支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 2014-04-29
相关资源
最近更新 更多