处理表单处理的最佳实践

Psy*_*che 3 html php forms

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

就我而言,我做了类似的事情:

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

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

And*_*lio 5

您应该遵循发布/重定向/获取模式以防止表单提交重复.

您可以通过以下方式将该模式与错误处理和成功的消息显示集成:

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

DISPLAY_FORM(ERRORS)
Run Code Online (Sandbox Code Playgroud)

这些是可能的情况:

  • 在表单url处获取请求:
    POST_REQUEST为false,因此您只显示没有错误的表单(所以正常的空表单)
  • 表单提交有错误:
    POST_REQUEST为true,您验证表单.在这种情况下,将在ERRORS变量(可能是数组)中返回一些错误.ERRORS变量不为空,因此您只需显示包含错误消息的表单
  • 正确的表单提交:
    POST_REQUEST为true,您验证表单.由于此时表单有效,因此ERRORS变量将为空,并且您执行重定向到<Successful URL>,这将向用户显示成功的消息.

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

Django Framework建议以这种方式处理表单.

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

一般表单错误(与指定字段无关)应具有emtpy键.

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

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