2

我是 PHP 新手,只花了两个星期的时间。我目前正在阅读“ PHP 和 MySQL Web 开发”,但在我正在处理的当前站点上的表单验证方面我应该做些什么。我确实决定第一次使用 HTML5Boilerplate,一切都已编码并且效果很好,但我似乎无法弄清楚如何制作我的表单。在我的表格中,我所需要的只是Name email并且message我正在使用该$_post方法。

  • 许多教程建议我对, 使用数组$name,但我想知道这是否是最佳实践?$email$message
  • 我还应该将 JavaScript 验证作为后备吗?
  • 如果我使用 PHP,有没有办法将所有提交的内容视为文本,还是 PHP 中的默认设置?
  • 我想创建一个简单的表单验证码,2+2它需要一个输入框,4我想知道最好的方法是if ($_POST['submit'] && $human == '4')
  • 我已经阅读了几条关于使用$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 联系表单
4

3 回答 3

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 将翻译许多有效字符。翻译后,它们可以被反转,但如果不反转,电子邮件将不再有效并且不会到达预期的目的地。

于 2013-04-15T19:43:50.467 回答
0

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

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

不知道你在这个上是什么意思,请详细说明?

我还应该将 JavaScript 验证作为后备吗?

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

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

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

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

我会用谷歌搜索一个很好的 PHP 验证码库。演示通常非常全面且易于实施。

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

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

于 2013-04-15T19:54:03.777 回答
0

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

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

我还应该将 JavaScript 验证作为后备吗?

是的。

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

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

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

您将需要使用 $_SESSION 来讲述他们验证码的答案。

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

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

于 2013-04-15T19:41:39.913 回答