【问题标题】:post form to different page then return将表单发布到不同的页面然后返回
【发布时间】:2012-02-16 07:43:14
【问题描述】:

我在 the-form-page.php 上的表单在提交到 handlerpage.php 时被 POST。

POST 之后我需要重定向回 the-form-page.php

嗯,这绝对没问题,目前正在工作。用户在 the-form-page.php 上填写表格,按“提交”,POST 数据由 handlerpage.php 处理(一些计算并将结果写入 mysql 数据库),然后我使用 window.location=

成功重定向回 the-form-page.php

问题是在 handlerpage.php 上从 the-form-page.php 的 POST 中提交的数据创建的大数据需要返回到 the-form-page.php 并且原始表单数据也需要返回到 the-form-page.php 以便用户看到“啊,这是我的原始数据和结果出来了。'

我不能使用 GET 以编程方式返回到 the-form-page.php -- 数据对于 GET 参数来说太大了。 而且我想坚持使用 window.location= 作为重定向方法(如果可能的话)。

如何重定向回 the-form-page.php 并显示用户的原始数据以及 handlerpage.php 的处理结果?

注意:重新架构以将 the-form-page.phphandlerpage.php 结合起来不是一种选择。

我已经完成了,在处理完 handlerpage.php 上的数据后,我现在成功返回 the-form-page.php,我只是需要用 handlerpage.php 上创建的原始数据和新数据重新填充它。

【问题讨论】:

  • 对于重定向,使用 headers。要取回表单数据,请使用 sessions
  • header() 的问题是,一旦出现第一个“echo”或任何其他类型的浏览器输出,您就不能再使用 header() 而不会收到“header already sent”错误。 window.location 避免了它。
  • 您可以使用输出缓冲,或者,在重定向部分之外处理消息。

标签: php forms redirect


【解决方案1】:

PHP Sessions 怎么样?这是simple example。在您的 the-form-page.php 检查会话变量的值并填充。您可以在 handlerpage.php 中设置会话变量。

【讨论】:

  • 我正在使用会话。我不喜欢的是这个。当用户关闭浏览器时,会话数据仍然存在。比如在我的localhost机器上开发,我可以关闭浏览器,第二天再回来,导航到那个站点,发现我在session中的用户登录还在!我什至不必再次登录,我仍然从昨天开始登录!如果我可以在用户关闭的“最后一个浏览器窗口”上终止会话,我会对会话感觉更好。对于可能仍然在会话中一段时间​​的数据,使用超时似乎真的很麻烦。
  • 浏览器窗口关闭后应立即清除会话。您是在谈论您的浏览器保存表单数据吗?这与 PHP 和您的浏览器为您做这件事无关。您必须禁用它或在询问时选择不记住数据。
  • 当您关闭浏览器时,会话数据被破坏,所以您所说的不是真的。除非您只是关闭选项卡。不过,有一些方法可以解决它,通过检查上次活动时间+日期。
  • 登录时,用户 ID 保存在会话中,因此服务器可以识别哪个用户是“登录用户”,以确保正确的数据库访问并显示“您当前登录为”。 loggedInUserName(来自我的会话变量)。然后我可以在仍然登录的情况下关闭所有浏览器窗口。第二天我可以在我的 localhost 机器上打开一个新的浏览器窗口,并且仍然看到“您当前登录为”。来自会话变量的 loggedInUserName。
  • @Erik 实际上这 正是正在发生的事情。我亲自阅读了关于 SO 的帖子,其中提到会话不会立即消失。只需在 SO 的搜索中输入“会话未销毁”,您就会阅读诸如 stackoverflow.com/questions/3043651/logout-problem-session-not-destroyed 之类的帖子
【解决方案2】:

您似乎正在尝试发明自己的AJAX,只是没有A(以及JAX)它。

我建议您使用 AJAX 提交表单,在 handlerpage.php 上返回 JSON 编码的“新数据”,然后在 the-form- 上显示收到的内容page.php.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2014-07-28
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多