在PHP中编写向导时的URL流

时间:2010-05-12 20:02:43

标签: php ajax validation wizard

我正在为我的网站编写基本向导。它将有4个步骤,每个步骤都需要有自己的URL。在继续之前,每个步骤必须首先验证表单。

如果给定步骤的表单无法验证,我不希望更改URL。但如果它通过,我确实希望它继续前进。

写这个的首选方法是什么?单独使用javascript进行验证是不够安全的。到目前为止我有两个想法,但我也不喜欢:

1)将表单发布到同一个脚本,如果通过则使用header()重定向到下一步 2)发送ajax帖子进行验证,然后使用location.href将用户发送到下一步(如果通过)。

有更好的方法吗?

谢谢,Brian

4 个答案:

答案 0 :(得分:3)

我更喜欢选项#1,因为它不需要javascript。

但是,您还需要考虑当有人书签或直接跳到错误的步骤时会发生什么。

答案 1 :(得分:2)

您的选项#1正是我的选择。

答案 2 :(得分:1)

请记住,您可以将这两种方法结合起来:

  1. 如果用户启用了JS,则可以获得更流畅的体验(无页面重新加载)
  2. 如果没有,则不会丢失任何功能
  3. 你会使用标准技巧来做到这一点:

    <form name="foo" action="bar.php" method="post">
        <input type="submit" value="Submit Form" onclick="ajax_handler(); return false;" />
    </form>
    

    这需要一些称职的工程,以便ajax_handler()可以使用与bar.php相同的代码来处理表单数据。此外,您应该特别注意AJAX路径,以便像后退按钮这样的东西继续按照用户的期望工作。

答案 3 :(得分:1)

另一种选择是将所有验证逻辑(在这些步骤之间)放在一个单独的PHP页面中(然后总是得到POST。)

在回发时,对当前步骤进行验证,并且(仅在有效时)分支到下一步。您还需要在帖子之间保留“之前的”验证。

您仍然可以differentmyform.php?step=1意义上拥有myform.php?step=2个网址,并且......通过一些简单的网址重写可能是myform/step1,{{1} },...