我是一个初学者在HTML和php(一切)。
我有4种类型的字段(评论表单):
-
从列表(选项标签)中选择一个
-
文本类型(如name)
-
type comment (textarea)
-
复选框(勾选全部或一个或无)
我有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函数,它将是泰语。
我过去测试过评论表单,它们工作正常。最近,我开始收到几乎是空的或完全空的电子邮件。通常情况下,两封邮件(我刚刚提到的邮件类型)会同时收到。
这些邮件有什么共同点:
复选框从未点击
在这里你可以键入单词来填充总是空的
只有两件事你可以看到的是在一个提交中同时选择了两个选择字段,然后我收到的第二个提交将是一封电子邮件,甚至没有做出选择。
我不明白的事:
我有java脚本来防止在电子邮件和名称字段中没有任何内容,但不知何故,电子邮件仍然发送给我空的名称和电子邮件?
为什么这些邮件同时进来?
不应该是由于if函数的语言,但我认为这是因为在我的英文形式的php它没有if函数(我忘了把它放进去),所以触发的电子邮件不是来自相同的形式。可能一个是英文形式,一个是中文形式。
这是某种机器人吗?垃圾邮件?或者谷歌检查我的网站?
这个特定的请求是使用禁用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();
}