【问题标题】:How do I organize my code when developing forms to meet the following requirements?在开发表单以满足以下要求时,如何组织我的代码?
【发布时间】:2011-01-23 02:26:51
【问题描述】:

我只是想找出为我的表单布置架构以满足以下要求的正确方法:

  1. 表单必须具有服务器端验证。
  2. 如果用户在 domain.com/register 上填写表单并且该表单未通过服务器端验证,则应将其带回 domain.com/register 并显示错误。
  3. (从第 2 点继续)如果用户返回 domain.com/register 以修复验证错误,他们已经输入到输入中的数据应该会自动显示。
  4. 如果用户在表单页面上单击后退或前进,浏览器不应抛出“确认表单重新提交”警告。

我对表单提交应该发布到哪里有点困惑。 domain.com/register 上的表单是否应该发布到仅处理验证的不同页面?如果是这样,我如何将验证错误和输入的数据传递回 domain.com/register?

或者,表单是否应该发布给自己?如果是这样,如何防止浏览器在单击后退或前进按钮时抛出“确认表单重新提交”警告?

【问题讨论】:

标签: php forms architecture


【解决方案1】:

解决此问题的一种合乎逻辑的方法(尝试使所有相关项目尽可能本地化)是使用单个页面,该页面在顶部附近具有“模式”switch statement,其中包含“更新”案例包含您的验证码。

在表单中,您只需将帖子发布到您所在的同一页面,但您需要在表单中添加一个名为“mode”的隐藏字段,其值为“update”。因此,当提交表单时,执行将流入您的 switch 语句的“更新”案例,您可以执行所需的验证。

如果验证成功,您通常会跳转到另一个页面(通过使用header('Location: ...'); 后跟exit();),如果验证失败,执行将继续向下执行,此时您应该输出验证期间发生的错误。

【讨论】:

  • 我目前正在做与此非常相似的事情。也许我遗漏了一些东西,但我不明白这会如何防止单击后退或前进按钮时出现“确认表单重新提交”警告。
  • @mike 一个糟糕(但有效)的方法是使用 GET 而不是 POST。
猜你喜欢
  • 2021-07-24
  • 2020-05-26
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多