【问题标题】:Display form confirmation message in the same page: best practice在同一页面中显示表单确认消息:最佳实践
【发布时间】:2010-09-28 09:00:00
【问题描述】:

我在许多网站和 Web 应用程序中都看到过这种行为,但我无法找到一种“干净且标准”的方式来重现它:用户填写表单,提交它,然后在成功验证后,表单会重新加载,顶部会显示一条消息,例如“项目已保存”。到目前为止没有问题,我不明白的是,如果重新加载特定页面,他们如何继续显示确认消息,但是当用户转到另一个页面然后返回到原始页面(包含表单的页面)时,消息不在那里了。似乎没有获取或发布数据,所以我假设使用会话变量或 cookie,但是他们如何知道何时保留以及何时取消设置它们?或者也许我错了,还有其他方法……请帮帮我!

【问题讨论】:

    标签: php forms confirmation


    【解决方案1】:

    我的猜测是他们使用了一个会话变量,该变量会在访问该页面时自行取消设置。因此,如果他们再次尝试访问它,他们只会被重定向。

    【讨论】:

    • 这并没有解释当你重新加载页面时消息是如何显示的。如果取消设置会话变量,则不应再次显示该消息。
    • 也许它使用了用户发送的 HTTP Request 标头中的 HTTP Referrer?
    • 据我所知 HTTP_REFERER 变量并不完全可靠,我错了吗?你能提供一些代码吗?
    • HTTP_REFERER 对于用户没有搞砸设置的网络浏览器总是可靠的:$_SERVER['HTTP_REFERER'] 将在 PHP 中获取它
    • 也许我可以使用会话变量来存储表单及其 url,然后对照当前的 url 检查 url。如果它们匹配,则应显示消息,否则应取消设置会话变量。
    【解决方案2】:

    也许带有表单的页面没有任何“未设置”会话变量,但其他页面有?

    【讨论】:

    • 如何处理不同页面(甚至同一页面)中的多个表单?
    • 每个表单验证的会话变量不必相同。例如,您可以将 $_SESSION['registrationFormValidation'] 用于注册表单,将 $_SESSION['contactFormValidation'] 用于联系表单。然后,您可以取消设置联系页面上的第一个,反之亦然。
    • 是的,这可能是一个解决方案,但它看起来并不那么“干净”...... :)
    • 确实如此。但是如果站点使用 Zend Framework,它可以使用命名空间(会话)以一种非常“干净”的方式来做到这一点。
    • 真的吗?我的网站不是基于 Zend Framework,但我想我会看看 Zend_Form 的内部工作原理。感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2012-09-14
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多