我在我的网站上的评论表单收到了空邮件


I got empty email from my comment form on my website

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

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

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

  2. 文本类型(如name)

  3. type comment (textarea)

  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 for泰语形式(我有if函数查找英语单词和发送英语单词到我的电子邮件,因为不是每个人都能读泰语):

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

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

我过去测试过评论表单,它们工作正常。最近,我开始收到几乎是空的或完全空的电子邮件。通常情况下,两封邮件(我刚刚提到的邮件类型)会同时收到。

这些邮件有什么共同点:

  1. 复选框从未点击

  2. 在这里你可以键入单词来填充总是空的

  3. 只有两件事你可以看到的是在一个提交中同时选择了两个选择字段,然后我收到的第二个提交将是一封电子邮件,甚至没有做出选择。

我不明白的事:

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

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

  3. 不应该是由于if函数的语言,但我认为这是因为在我的英文形式的php它没有if函数(我忘了把它放进去),所以触发的电子邮件不是来自相同的形式。可能一个是英文形式,一个是中文形式。

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

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

你对所有4个问题的答案是还添加服务器端验证(在这种情况下在PHP中)

例如

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

其他字段

相同

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

把服务器端/客户端验证想象成街道起点和主门锁上的守卫。仅仅因为你的街道入口处通常有一个警卫,你不能让你的门一直开着,认为它是安全的。你必须确保你的门上只有正确的人进入你的家,而不管有没有警卫。

您可以使用此代码更具体,如果您避免在post值中使用空格则使用trim函数

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