【问题标题】:Best practice to deal with form processing处理表单处理的最佳实践
【发布时间】:2010-06-04 15:00:37
【问题描述】:

我想知道处理表单处理的最佳做法是什么?

就我而言,我会这样做:

  • 如果用户尚未提交表单
    • 显示表单
  • 其他
    • 如果有表单错误
      • 显示错误
      • 再次显示表单
    • 其他
      • 显示成功消息
      • (和)再次显示表单

我的问题是我将表单的 HTML 代码重复了 3 次,我认为这不是一个好习惯(文件长,难以阅读)。

【问题讨论】:

  • 您使用什么技术来处理表单?
  • 我已将 PHP 标记添加到问题中。通过这种方式,您可能会得到更具体的回复。
  • 我一直在制作函数 display_form() 并将html表单放在那里。我自己也在寻找更优雅的解决方案,但这还不错。很难阅读通过设置令人费解的 if/else 迷宫以在多次过滤后显示表单的代码。但是有一个像 display_form() 这样的函数使它更具可读性。在表单中只需检查错误是否设置为 isset($errors) 以显示错误。

标签: php html forms


【解决方案1】:

您应该遵循Post/Redirect/Get 模式以防止表单提交重复。

您可以通过这种方式将该模式与错误处理和成功的消息显示相结合:

if POST_REQUEST:
  ERRORS = VALIDATE_FORM()
  if ERRORS IS EMPTY:
    PROCESS_REQUEST
    REDIRECT TO <Successful URL>

DISPLAY_FORM(ERRORS)

这些是可能的情况:

  • 在表单 url 处获取请求:
    POST_REQUEST 为 false,因此您只显示没有错误的表单(因此是正常的空表单)
  • 表单提交出错:
    POST_REQUEST 为真,您验证表单。在这种情况下,将在 ERRORS 变量(可能是一个数组)中返回一些错误。 ERRORS 变量非为空,因此您只需显示带有错误消息的表单
  • 正确的表单提交:
    POST_REQUEST 为真,您验证表单。由于这次表单有效,ERRORS 变量将为空,您执行重定向到 ,它将向用户显示成功消息。

使用此模式可以防止用户在正确提交表单后刷新页面时再次发送表单数据。

Django 框架建议以这种方式处理表单。

在表单显示中处理错误的一个好方法是让 VALIDATE_FORM() 函数返回一个 关联 错误数组,其中每个键是字段的名称,对应的项是一个数组错误消息。

一般表单错误(与指定字段无关)应该有一个空键。

例如,您可以通过这种方式在 DISPLAY_FORM() 函数中显示错误:

<ul class="errors"><?php foreach(ERRORS['field_name'] as $error) { echo "<li>$error</li>"; } ?></ul>
<input name="field_name" type="text" ... />

【讨论】:

    【解决方案2】:

    您的工作流程看起来正确。我不明白为什么需要为表单重复 HTML 代码。重构您的代码,以便成功消息显示在表单顶部(如果存在),错误显示在输入框旁边(如果存在)。在您的 (PHP?) 文件的顶部,处理所有内容并设置将在下面的表单中显示的变量。

    【讨论】:

      【解决方案3】:

      您可以使用相同的表单代码,只在表单上方显示错误/成功消息。

      【讨论】:

        【解决方案4】:

        看,就像鸡蛋一样简单!
        只需将相同的操作按不同的顺序排列即可:

        • 如果用户提交了表单
          • 如果有表单错误
            • 填充错误数组
          • 其他
            • 将数据记录到数据库
            • 302 重定向,按照 HTTP 标准的要求
            • 退出
        • 如果我们有一些错误
          • 显示错误
          • 填写表单字段值
        • 显示表单

        如果你不能没有成功消息(我认为这是一件非常无用的事情),你可以使用 get 参数(不太喜欢)或 session(最佳)来显示它

        哎呀!那是一个旧的。

        【讨论】:

          【解决方案5】:

          鉴于您在每种情况下都显示表单,您是否可以在默认情况下简单地显示相同的表单,然后添加诸如错误消息等额外内容?

          您还使用了哪些其他技术?

          【讨论】:

            【解决方案6】:

            您可以将脚本分成两部分:

            • 一个显示表单

            • 获取表单数据,检查并返回错误或成功消息

            【讨论】:

              【解决方案7】:

              我还要注意,使用模式和 HTML5 是一种很好的做法,可以避免使用无效数据提交表单。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2023-04-08
                • 2013-08-25
                • 1970-01-01
                • 2018-01-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多