【问题标题】:Website form being automatically sent (PHP script firing automatically)网站表单被自动发送(PHP 脚本自动触发)
【发布时间】: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


【解决方案1】:

我曾经遇到过这个问题,无法给出解释,但我有一个解决方案:只需在调用邮件函数之前验证空值。例如:

if(!empty($_POST['txtEmail']) && !empty($_POST['txtMessage'])) mail(...);

【讨论】:

  • 是的,这就是我最终要做的,我只是想先找到那个难以捉摸的解释。哦,好吧
  • 我相信@Rory McCrossan 可以通过蜘蛛机器人找到答案。
猜你喜欢
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 2021-03-31
  • 1970-01-01
  • 2011-10-10
相关资源
最近更新 更多