【问题标题】:I got empty email from my comment form on my website我在我的网站上的评论表单中收到了空电子邮件
【发布时间】:2017-01-06 09:04:42
【问题描述】:

我是 HTML 和 php(一切)的初学者。

我有 4 种类型的字段(评论表单):

  1. 从列表中选择一个(选项标签)

  2. 输入文本(例如姓名)

  3. 输入注释(文本区域)

  4. 复选框(勾选全部或一个或不勾选)

我有 Javascript(防止姓名和电子邮件为空):

<script>
function validateForm1() {
    var x = document.forms["form_contact"]["name"].value;
    if (x == null || x == "") {
        alert("Name must be filled out");
        return false;

    }
     var x = document.forms["form_contact"]["email"].value;
    if (x == null || x == "") {
        alert("Email must be filled out");
        return false;
    }
}
</script>

我有一个语言字段,您可以从中选择一种语言。我也有 3 种语言的网站,其中一种是英文的。那些不是英文的有单独的php文件。

泰国网站的语言字段:

<option></option> 
<option>thai language written in thai and then thai language written in english</option> 
<option>english language written in thai and then english language written in english</option>
<option>mandarin language written in thai and then mandarin language written in english</option>

我的泰文 php(我有 if 功能来查找英文单词并将英文单词发送到我的电子邮件,因为不是每个人都可以阅读泰文):

$language = $_POST['language'];
if (strpos($language, 'English')){
    $language = "English";
}elseif (strpos($language, 'Chinese')){
    $language = "Chinese";
}else{
    $language = "Thai";
}

您可能已经注意到,如果一个人没有选择一种语言,由于 if 函数,它将是泰语。

我过去曾测试过评论表单,它们很有效。最近,我开始收到几乎是空的或完全空的电子邮件。通常,2 封电子邮件(我刚才提到的电子邮件类型)会同时收到。

这些电子邮件的共同点:

  1. 复选框从未被点击

  2. 你可以在哪里输入单词来填写总是空的

  3. 您只能看到两件事是在一次提交中同时选择了 2 个选择字段,然后我收到的第二次提交将是一封电子邮件,甚至没有进行选择。

我不明白的事情:

  1. 我有 java 脚本来防止在电子邮件和姓名字段中没有任何内容,但不知何故,电子邮件仍然以空名称和电子邮件发送给我?

  2. 为什么这些邮件同时进来?

  3. 由于 if 函数,不应该是一种语言,但我认为这是因为在我的英文表单的 php 中它没有 if 函数(我忘了把它放进去),所以触发的电子邮件是不是来自同一个表格。应该是英文的和中文的同时出现。

  4. 这是某种机器人吗?垃圾邮件?或谷歌检查我的网站?

【问题讨论】:

  • 许多表单垃圾邮件机器人只会发布表单而不运行任何 JavaScript。一种策略可能是防止表单在没有成功运行 DOM 操作的情况下发布,例如在页面加载时将输入元素放入您的 &lt;form&gt;
  • #4 它不是谷歌。
  • 总是做一个服务器端验证以防止垃圾邮件,黑客/机器人会直接查询你的php页面尝试插入数据

标签: javascript php html forms email


【解决方案1】:

此特定请求是使用禁用了 Javascript 的浏览器进行的,并且您的所有验证都只是客户端 Javascript,因此可以很好地提交空白表单。简单!

您对所有 4 个问题的回答是还添加服务器端验证(在本例中为 PHP)

例如

if(empty($_POST["name"]))
{
   die("You did not enter a name, we can not send email");
}

其他字段相同

一旦你这样做了,你会注意到机器人有时仍然可以提交带有垃圾邮件/虚假信息的表单(尽管空白信息问题将得到解决)。此时请搜索称为 CAPTCHA

的内容

将服务器/客户端验证视为街道起点和主门锁的 Gaurd。仅仅因为您的街道入口处通常有一名守卫,您就不能一直认为门是安全的。您必须确保只有合适的人进入您的家门,而不管那个守卫。

【讨论】:

  • 嗨是w3schools.com/php/php_form_validation.asp 服务器端验证或只是客户端验证(对不起,我很困惑)。嗯,在我使用 java 脚本生成随机数并要求用户输入一个小于生成数字的数字之前,我曾尝试设置诸如验证码之类的东西:/(这是我想到的另一个客户端验证的事情吗?)跨度>
  • 不要费心阅读 w3schools.com,它已经很糟糕了。该页面上没有服务器端验证。简而言之,您拥有的所有 Javascript 验证都称为 客户端,因为它在客户端计算机上运行。您的 PHP 验证将被称为服务器端,因为它们在您的服务器上运行,并且任何客户端都不能直接禁用它们。所以你只需要在你的 PHP 代码中添加一些类似的检查,在你发送电子邮件之前查看字段是否为空
  • 这是一个很好的基本验证码。您可以要求人们在一个框中输入 2+2 的结果,然后在您的 PHP,而不是 JS 中,代码检查提交的结果是否正确,然后再发送电子邮件
  • 我想我现在有点明白了:/ 由于 php 文件有 mail() 发送我的电子邮件,我只需要代码在我的 php.ini 中的 mail() 之前进行验证。所以我应该把验证码放在 mail() 代码之前,如果无效则使用 die() 或 exit() 来停止继续下面的代码
【解决方案2】:

您可以使用此代码更具体,如果您避免后值中的空格,则使用修剪功能

if(empty(trim($_POST["name"])))
{
 echo 'Please enter your name';
 die();
}

【讨论】:

  • 第二个条件有什么用?
  • 这是空检查,特殊情况,它将通过空函数服务,但也使用它,这就是我使用它的原因
  • empty()它的冗余之后不需要任何这样的空检查
  • 如果我只使用空间呢?
猜你喜欢
  • 2022-08-08
  • 2014-06-16
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多