处理表单处理的最佳实践

时间:2010-06-04 15:00:38

标签: php html forms

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

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

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

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

7 个答案:

答案 0 :(得分:5)

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

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

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

DISPLAY_FORM(ERRORS)

以下是可能的情况:

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

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

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" ... />

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

  • 如果用户提交表单
    • 如果有形式错误
      • 填充错误数组
    • 否则
      • 将数据记录到数据库
      • 302 regirect,正如HTTP标准
      • 所要求的那样
      • 出口
  • 如果我们有一些错误
    • 显示错误
    • 填写表单字段值
  • 显示表单

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

糟糕!这是一个旧的。

答案 4 :(得分:0)

你可以将你的剧本分成两部分:

  • 显示表单

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

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

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

您还在使用其他什么技术?