与PHP表单验证实践混淆



我是PHP的新手,只花了两周的时间。我目前正在阅读">PHP和MySQL Web开发",但在我正在开发的一个网站上,我不知道应该做什么来进行表单验证。我确实决定第一次使用HTML5Boilerplate,一切都经过了编码,效果很好,但我似乎不知道如何做我的表单我所需要的只是Nameemailmessage,并且我正在使用$_post方法。

  • 许多教程建议我为$name$email$message,但我想知道这是否是最佳实践
  • 我是否应该将JavaScript验证作为后备方案
  • 如果我使用PHP,有没有一种方法可以将所有提交的内容都视为文本,或者这在PHP中是默认的
  • 我想用2+2创建一个简单的表单captcha需要4的输入框,我想知道最好的方法是什么CCD_ 10
  • 我读过几篇关于使用$email = htmlspecialchars不好的评论,有人能解释为什么吗

我为这个帖子感到抱歉,但这周我读了几篇(我认为是15篇(关于PHP表单验证的教程,它们都有各自的优缺点,我想正确地开始使用PHP。我确实尝试在我的BoilerPlate中实现Eric Martin的表单,但它不起作用,我在Firefox中也没有收到任何浏览器错误。

如果有帮助的话,下面是我读过的一些教程:

  1. 如何使用HTML5、CSS3和PHP创建联系人表单
  2. 如何创建基于Ajax的HTML5/CSS3联系人表单
  3. 集成HTML5、CSS和PHP创建一个非常基本的联系人表单
  4. 如何创建Kick Ass PHP联系人表单

我按照要点的顺序对我的响应进行了编号。。。

  1. $name、$email和$message已在提交时的数组$_POST中。将它们移到另一个变量只是一种偏好(不一定是最佳实践(。当做一个长表单时,为每个变量键入$_POST可能会让人很累。

  2. Javascript验证是一种方便,而不是后备。PHP将是您的备用方案。JS不是必需的,但很有帮助。您应该始终在PHP中进行验证,因为JS可以很容易地绕过,但是JS很好。如果我提交了一个有错误的表单,而我必须等待整个页面加载才能发现,我可能不会再次填写表单来更正它。JS中更好的方法是在blur(即光标离开字段时(上验证每个字段,这样我就可以在出现错误时立即返回。

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

  4. 制作一张图片,向他们展示,只需知道预期的反应,并像其他领域一样进行比较。如果你想动态地绘制图像,只需生成2个随机数,将结果存储在会话中,使用gd用数学表达式绘制图像,并在发布时进行比较。

  5. 有许多有效的字符,htmlspecialchars将翻译。翻译后,它们可以反转,但如果不反转,电子邮件将不再有效,也不会到达预期目的地。

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

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

我是否应该将JavaScript验证作为后备方案?

是的。

如果我使用PHP,有没有一种方法可以将所有提交的内容都视为文本,或者这在PHP中是默认的?

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

我想用2+2创建一个简单的表单captcha,它需要一个4的输入框,我想知道用if($_POST['submit']&&$human=='4'(是最好的方法吗?

您将希望使用$_SESSION来报道他们的captcha的答案。

我已经阅读了一些关于使用$email=htmlspecialchars不好的评论,有人能解释为什么吗?

电子邮件中有几个特殊字符是有效字符,htmlspecialchar((将对其进行翻译。

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

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

不确定你对这个是什么意思,请详细说明?

我是否应该将JavaScript验证作为后备方案?

这绝对是个好主意。与其说这是一种退步,不如说是一种赞美。真正重要的是,您的PHP处理验证,这样就不会发生MySQL注入(或其他糟糕的事情(。任何JS验证都可以很容易地绕过,所以你不能依赖它。JS验证主要是一种用户友好的方式,可以显示字段是否需要正确的格式。

如果我使用PHP,有没有一种方法可以将所有提交的内容都视为文本,或者这在PHP中是默认的?

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

我想用2+2创建一个简单的表单captcha,它需要一个4的输入框,我想知道用if($_POST['submit']&&$human=='4'(是最好的方法吗?

我会在谷歌上为PHP搜索一个好的Captcha库。演示通常非常全面,易于实现。

我已经阅读了一些关于使用$email=htmlspecialchars不好的评论,有人能解释为什么吗?

我会研究使用正则表达式验证电子邮件,有些函数也可以这样做,请参阅:如何在PHP中验证电子邮件?

最新更新