【问题标题】:How to do a wizard in a website?如何在网站上做一个向导?
【发布时间】:2012-10-12 14:00:14
【问题描述】:

在一个网站中,我想实现一个wizard。它应该看起来像一系列表格。

我的要求是:

  • 用户应该能够使用后退和前进浏览器按钮,而不会被提示重新提交表单(来回时)。
  • 如果用户在之前填写的页面上后退或前进,这些字段应自动完成
  • 如果用户尝试访问一个页面而没有填写前面的步骤,他应该被相应地重定向(最后一个需要的页面)。
  • 用户离开和回来后应该能够恢复表单完成。
  • 在我的模型中,每一页都需要填写前一页。每个页面都有自己的验证。
  • 网址应该很漂亮。
  • 该向导应该在没有 javascript 的情况下工作(但不是强制性的)。

你将如何实现它? (一系列http post表单,http get表单,是否通过javascript提交?)


思考:

我计划将所有信息存储在会话中,并在向导结束时将信息保存在数据库中并删除当前会话信息。这样我就可以自动完成这些字段,并且知道用户在完成向导时的位置。

我的主要担忧:

  • 如果我使用 http 帖子表单实现,浏览器会提示重新提交每个表单(我不知道如何控制)
  • 如果我使用 http GET 表单来实现它,那么 URL 会充满信息,并且可能会很长。而且这不是 GET 请求的方式。
  • 如果我通过 javascript 通过 http post 提交每个表单,将不会有提示,但我的向导将无法使用 javascript(也许解决方案是覆盖默认表单行为,使其在使用和不使用 javascript 时都可以使用)李>

【问题讨论】:

  • 为什么不在一个表单中简单地使用 jQuery 选项卡(样式看起来像一个多步骤向导流程)?
  • @Kane 好主意。但它需要一些 javascript 来验证每个步骤(仅提交相关字段),并且 no-javascript 后备将是一个巨大的表单。
  • 你能在公共网站上展示你喜欢的巫师吗?
  • @Colonel Panic 显然这个最好:voyageronline.files.wordpress.com/2011/09/nerdrage031.jpg

标签: javascript http browser http-post


【解决方案1】:

我不推荐使用 session 来存储任意数据!如果您最终使用会话进行登录身份验证,这往往会很快变得混乱,并且还会混淆安全模型。将您的身份验证与设置数据分开,并专门为设置创建一个表,或使用 javascript localStorage!

在您的情况下,您所描述的内容对我来说听起来很像一种长表单,它具有显示/隐藏功能以及多个表单部分,并增加了持久存储的怪癖!

换句话说,不是form1 > form2 > form3 > form4 > done

form_section_1 > validate, save data, and then display form_section_2 and hide form_section_1 > validate, save data, and then display form_section_3 and hide form_section_2 > etc > true form submit once

对于没有 javascript 的用户,只需在提交任何部分时在所有部分中验证他们的 php 信息。如果您真的想将其存储在边缘情况下,您可以将其 session_id 标识的信息存储到设置表中。

在这种情况下,为了简单起见,我会使用 localStorage 来存储每次验证的所有数据,并使用 javascript 来防止意外离开主窗体。如果你真的必须通过支持 ie7 (http://caniuse.com/#search=localStorage) 来使你的生活复杂化,那么检测 localStorage 并在它不存在的情况下,将数据传递给 php 脚本,然后将其放入单个数据容器对象并转换它全部保存到单个 json 包中,保存在会话中的单个变量中,或者更好的是,保存在数据库的设置表中。

【讨论】:

    【解决方案2】:

    我会使用 PHP 会话变量在向导的不同页面之间存储填充的数据。通过使用 html 表单,如果您返回浏览器历史记录,您将收到重新发送数据的提示,我不知道如何解决这个问题...虽然使用 PHP 存储变量很容易,但请提供表单 method=post 并使用$_REQUEST 命令检索 PHP 文档中的信息,以避免使用 GET 的长 URL。祝你好运,如果我想到了什么会更新。

    【讨论】:

    • 另外,我会使用 javascript 验证表单,但如上所述将其存储在 PHP 中。
    • 我不推荐使用 session 来存储任意数据!如果您最终使用会话进行登录身份验证,这往往会很快变得混乱,并且还会混淆安全模型。将您的身份验证与设置数据分开,并专门为设置创建一个表,或使用 localStorage!
    猜你喜欢
    • 2019-05-11
    • 2013-11-13
    • 2016-07-16
    • 2018-07-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多