使用 PHP 编写向导时的 URL 流程

发布于 2024-09-01 07:48:41 字数 334 浏览 11 评论 0原文

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

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

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

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

有更好的方法吗?

谢谢,布莱恩

I am writing a basic wizard for my web site. It will have 4 steps, and each needs to have its own URL. Each step must first validate a form before moving on.

If the form for a given step fails to validate, I don't want the URL to change. But if it passes, I do want it to move on.

What is the preferred way to write this? Using javascript alone to validate is not secure enough. I have 2 ideas so far but I don't love either:

1) Post the form to the same script and use a header() redirect to the next step if it passes.
2) Send an ajax post to validate and then use location.href to send user to the next step if it passes.

Is there a better way to do this?

Thanks, Brian

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

酒绊 2024-09-08 07:48:41

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

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

I would prefer option #1, since it doesn't require javascript.

However, you'll also want to consider what happens when somebody bookmarks or skips directly to the wrong step.

入怼 2024-09-08 07:48:41

你的选项#1正是我所做的。

Your option #1 is exactly the way I'd do it.

鸠书 2024-09-08 07:48:41

请记住,您可以结合这两种方法,以便:

  1. 如果用户启用了 JS,他们会获得更流畅的体验(无需重新加载页面)
  2. 如果没有,则不会丢失任何功能

您可以使用标准技巧来做到这一点

<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 路径,以便后退按钮等内容继续按用户期望的方式工作。

Keep in mind that you can combine these two approaches so that:

  1. If the user has JS enabled, they get a smoother experience (no page reload)
  2. If they don't, no functionality is lost

You would do that using a standard trick:

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

This will require some competent engineering so that ajax_handler() can utilize the same code as bar.php does to process the form data. Also, you should pay special attention in the AJAX path so that things like the back button continue to work as the user expects.

凡间太子 2024-09-08 07:48:41

另一种选择是将所有验证逻辑(在此步骤之间)放在一个 PHP 页面中(然后总是进行 POST 编辑)。

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

您仍然可以使用 myform.php?step=1myform.php?step=2 意义上的不同 URL 以及...通过一些简单的 url 重写,可以是 myform/step1myform/step2、...

Another option would be to have all the validation logic (between this steps) in one single PHP page (which then always gets POSTed to).

At postback, do the validation for the current step and (only if valid) branch out to the next step. You also need to persist the 'previous' validations between posts.

You can still have different URL's in the sense of myform.php?step=1 and myform.php?step=2 and ... With some simple url rewriting that could be myform/step1, myform/step2, ...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文