Php 处理表单处理的最佳实践

Php 处理表单处理的最佳实践,php,html,forms,Php,Html,Forms,我想知道处理表单处理的最佳实践是什么 就我而言,我会这样做: 如果用户尚未提交表单 显示表单 否则 如果有表单错误 显示错误 再次显示表单 否则 显示一条成功消息 (和)再次显示表单 我的问题是,我将表单的HTML代码重复了3次,我认为这不是一个好的做法(长文件,难以阅读)。鉴于在每次显示表单时,您是否可以默认显示相同的表单,然后添加错误消息等附加内容 您还使用了哪些其他技术?您的工作流看起来是正确的。我不明白为什么需要为表单重复HTML代码。重新构造代码,使成功消息显示在表

我想知道处理表单处理的最佳实践是什么

就我而言,我会这样做:

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

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

鉴于在每次显示表单时,您是否可以默认显示相同的表单,然后添加错误消息等附加内容


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

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

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

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

  • 其中一个显示表单

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

您应该遵循该模式,以防止表单提交重复

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

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

DISPLAY_FORM(ERRORS)
如果POST\u请求:
错误=验证表单()
如果错误为空:
处理请求
重定向到
显示表单(错误)
以下是可能的情况:

  • 在表单url获取请求:
    POST_请求为false,因此您只需显示没有错误的表单(因此是一个正常的空表单)
  • 表单提交有错误:
    如果POST_请求为真,则验证表单。在这种情况下,errors变量(可能是数组)将返回一些错误。ERRORS变量不是空的,因此您只需显示带有错误消息的表单
  • 正确的表单提交:
    POST_请求为真,您验证表单。由于这一次表单是有效的,所以ERRORS变量将为空,并且您将执行重定向到的,该重定向将向用户显示成功消息
使用此模式可以防止用户在正确提交表单后刷新页面时再次发送表单数据

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

处理表单显示中的错误的一个好方法是让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" ... />

看,这就像鸡蛋一样简单
只需按不同的顺序执行相同的操作:

  • 如果用户提交了表单
    • 如果有表单错误
      • 填充错误数组
    • 否则
      • 将数据记录到数据库中
      • 302 regirect,根据HTTP标准的要求
      • 出口
  • 如果我们有一些错误
    • 显示错误
    • 填写表单字段值
  • 显示表单
如果没有成功消息(在我看来这是一件毫无用处的事情),您可以使用get参数(不太受欢迎)或session(最佳)来显示它


哎呀!这是一个旧的

我还要指出,使用模式和HTML5是避免使用无效数据提交表单的一个很好的实践

您使用什么技术来处理表单?我已经在问题中添加了PHP标记。通过这种方式,您可能会得到更具体的响应。我自己也在寻找一个更优雅的解决方案,但这并不是那么糟糕。在经过多次过滤后,通过设置令人费解的if/else迷宫来显示表单的代码很难读取。但是,使用类似display_form()的函数使其更具可读性。在表单中,只需检查是否将错误设置为设置为显示错误($errors)。