3

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

我的要求是:

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

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


想法:

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

我的主要担忧:

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

2 回答 2

0

我不建议使用 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 包,以保存在会话中的单个变量中,或者更好的是,保存在数据库的设置表中。

于 2012-10-12T20:55:54.727 回答
-1

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

于 2012-10-12T14:10:01.830 回答