【发布时间】:2016-08-03 22:11:41
【问题描述】:
我最近开始在 SiteGround 上管理一个网站,但我无法弄清楚我的“联系我们”表单中发生了一些奇怪的事情。每天,通常在东部时间下午 1 点,我都会收到一封电子邮件,通知我“联系我们”表格已填写,但表格中没有任何信息。
该页面有一些简单的文本输入和一个单选按钮,表单验证由 javascript 处理,因此如果输入为空,则不会提交表单。当一切都被验证后,信息通过 AJAX 发送,一个简单的 PHP 脚本发送一封电子邮件(PHP 的 mail() 函数),并将信息输入数据库。
所以每天下午 1 点,通常是在当天,我都会收到一封没有任何信息的电子邮件。该表单已经过测试,并且在正确输入时会显示信息。 我不知道是什么原因造成的!我知道我可以通过在 PHP 脚本中检查一些简单的变量来阻止电子邮件和数据库条目,但我想知道为什么会发生这种情况,有人有什么想法吗?
我可以发布一些代码,但它们都是基本的 HTML、一个 AJAX jquery 调用和大约 10 行用于发送电子邮件的 php。
【问题讨论】:
-
检查你的服务器访问日志,你可以看到页面是从哪里被访问的。
-
可能是爬取您网站的机器人。你有网站上的任何分析吗?还是对填写表格的用户进行 IP 跟踪?您还应该进行服务器端验证。 JS 验证是对用户的一种礼貌,服务器端是业务关键。
-
确保你的 php sendmail 脚本在运行代码之前检查 post submit。
-
@KaseyE 谷歌分析可能不会将谷歌分析爬虫算作一次访问,谷歌分析爬虫确实会尝试提交表单。首先您需要添加服务器端验证,其次您可以在您的
robots.txt中为该路径添加一个Disallow: /path条目,并希望爬虫尊重它。 -
@RoryMcCrossan 关于服务器端验证的建议怎么强调都不过分。完全有可能无法解析或运行 JavaScript 的机器人正在访问您的页面并提交您的表单。在这种情况下,您的 JavaScript 验证没有实际意义,这就是为什么进行服务器端验证绝对重要的原因。要验证这一点,请在 chrome 中打开您的页面,打开开发工具,选择
Disable JavaScript选项并尝试提交您的表单。如果它有效,那么您已经找到了问题。
标签: php jquery html ajax forms