对PHP表单验证实践感到困惑

时间:2013-04-15 19:27:40

标签: php forms validation

我是PHP的新手,只花了两周时间。我目前正在阅读“ PHP和MySQL Web开发”,但我在我正在处理的当前网站上的表单验证方面应该做些什么。我决定第一次使用HTML5Boilerplate,所有内容都编码并且工作得很好,但我似乎无法弄清楚如何做我的表单。在我的表单中,我要求的是Name emailmessage,我正在使用$_post方法。

  • 许多教程建议我使用$name$email和。{ $message但我想知道这是否是最佳做法?
  • 我是否仍应将JavaScript验证作为后备包含?
  • 如果我使用PHP,有没有办法将所有提交的内容视为文本,或者是PHP中的默认内容?
  • 我想用2+2创建一个简单的表单验证码 需要一个4的输入框,我想知道这是最好的方法 那个if ($_POST['submit'] && $human == '4')
  • 我已经阅读了几条关于使用$email = htmlspecialchars的评论是否有人解释原因?

我为这个帖子道歉但是我已经阅读了几周(我相信的15)关于PHP表单验证的教程,他们都有自己的优点和缺点,我想开始正确使用PHP。我确实尝试在我的BoilerPlate中实现Eric Martin's表单,但它不起作用,也没有在Firefox中收到任何浏览器错误。

如果它有帮助,这些是我读过的一些教程:

  1. How to Create a Contact Form using HTML5, CSS3 and PHP
  2. How To Create An Ajax-Based HTML5/CSS3 Contact Form
  3. Integrating HTML5, CSS and PHP to Create a Very Basic Contact Form
  4. How to Create Kick-Ass PHP Contact Forms

3 个答案:

答案 0 :(得分:1)

我按照要点按顺序编号我的回复...

  1. $ name,$ email和$ message已经在提交的数组中,$ _POST。将它们移动到另一个变量只是一种偏好(不一定是最佳实践)。当做一个长形式时,只需为每个变量键入$ _POST就会很累。

  2. Javascript验证是一种便利,而不是后备。 PHP将是你的后备。 JS不是必需的,但是很有帮助。您应该始终在PHP中验证,因为JS可以轻松绕过,但JS很不错。如果我提交一个有错误的表单而我必须等待整个页面加载才发现,我可能不会再次填写表格来纠正它。在JS中更好的方法是验证模糊的每个字段(意味着当光标离开字段时),以便我可以立即返回,如果有错误的话。

  3. PHP不是严格类型的,意味着'2' == 2 == 2.0。 PHP将尝试隐式转换几乎任何类型。

  4. 制作图像,向他们展示,只知道预期的响应并将其与其他任何字段进行比较。如果你想动态地制作图像,只需生成2个随机数,将结果存储在会话中,使用gd绘制带有数学表达式的图像,并在帖子上进行比较。

  5. htmlspecialchars会翻译许多有效字符。翻译后,它们可以被撤消,但如果没有撤销,电子邮件将不再有效,并且无法到达目的地。

答案 1 :(得分:0)

  

许多教程建议我使用$ name,$ email和$ message的数组,但我想知道这是否是最佳做法?

我不确定你的意思。它们位于$ _POST,$ _GET和/或$ _REQUEST数组中,具体取决于它们的发送方式。

  

我是否仍应将JavaScript验证作为后备广告?

  

如果我使用PHP,有没有办法将所有提交的内容视为文本,或者是PHP中的默认内容?

浏览器通过HTTP提交的所有数据都被视为字符串,无论它是什么数据。这就是为什么你想使用is_numeric()而不是is_int()来检查数字。

  

我想用2 + 2创建一个简单的表格验证码,需要一个4的输入框,我想知道if($ _POST ['submit']&& $的最好方法人=='4')?

您将需要使用$ _SESSION来回答其验证码的答案。

  

我已经阅读了几条关于使用$ email = htmlspecialchars的评论是否有人可以解释为什么?

电子邮件中有几个特殊字符是有效字符,htmlspecialchars()将翻译。

答案 2 :(得分:0)

我知道这并不能解决所有问题,但希望这会有所帮助。

  

许多教程建议我使用$ name,$ email和$ message的数组,但我想知道这是否是最佳做法?

不确定你在这个上的意思,请详细说明一下?

  

我是否仍应将JavaScript验证作为后备广告?

这绝对是个好主意。这不仅仅是一种恭维的后备。真正重要的是你的PHP处理验证,因此不会发生MySQL注入(或其他不好的事情)。任何JS验证都可以轻松绕过,因此您不能依赖它。 JS验证主要是一种用户友好的方式,以正确的格式显示字段是否需要。

  

如果我使用PHP,有没有办法将所有提交的内容视为文本,或者是PHP中的默认内容?

PHP没有关于变量的内在类型。话虽这么说,您可以使用强制转换和函数来确保变量是数字等。对于表单,如果您有多个具有相同名称值foods[]的复选框,则$_POST['foods']是一个数组。大多数其他字段都以文本形式提交。

  

我想用2 + 2创建一个简单的表格验证码,需要一个4的输入框,我想知道if($ _POST ['submit']&& $的最好方法人=='4')?

我会谷歌一个很好的Captcha PHP库。这些演示通常非常彻底且易于实施。

  

我已经阅读了几条关于使用$ email = htmlspecialchars的评论是否有人可以解释为什么?

我会考虑使用正则表达式验证电子邮件,有些函数也可以这样做,请参阅:How to validate an Email in PHP?