我为网站整理了一个简单的PHP电子邮件表单,但它经常发送空白电子邮件。大多数字段都是“必需的”,我使用验证码系统已有一段时间了,但空白的电子邮件不断出现。
HTML标记:
<form action="mail_send.php" method="post">
<input name="name" type="text" required="required" size="40" />
<input name="email" type="text" required="required" size="40" />
<input name="company" type="text" size="40" />
<textarea name="message" cols="80" rows="7" required="required"></textarea>
<input type="submit" value="Submit" />
</form>
PHP:
$name = $_POST['name'];
$email = $_POST['email'];
$company = $_POST['company'];
$message = $_POST['message'];
$formcontent=" FROM:\n $name \n\n COMPANY:\n $company \n\n MESSAGE:\n $message";
$recipient = "email address";
$subject = "Subject";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "<script>window.location = 'confirmation.php'</script>";
我测试时一切正常,我收到来自表单的电子邮件完全没有问题,但由于某种原因,我经常收到空白的电子邮件(可能来自机器人)。
有什么想法吗?
谢谢!
答案 0 :(得分:3)
如果您的HTML表单和PHP在同一个文件中,而您没有检查这些输入是否为空,则可能会发生这种情况。如果不是在同一个文件中,不检查空白,仍然适用。
你可能是机器人的受害者,或者一些小丑经常访问你的网站只是为了打扰你。
或者表单的方法网址是由某人或某事直接访问的,这是我觉得这里可能存在的问题,因为您的输入确实有required
。
因此,对所有输入使用条件!empty()
。
即:
旁注:||
检查一个或任何一个是否为空。
if( !empty($_POST['name']) || !empty($_POST['email']) ){
$name = $_POST['name'];
$email = $_POST['email'];
// process mail
}
您可以添加其他内容。
或者为您的提交提供名称属性:
<input name="submit" type="submit" value="Submit" />
然后检查按钮是否已设置且输入是否为空:
if(isset(_POST['submit'])){
if(!empty($_POST['name']) || !empty($_POST['email']) ){
$name = $_POST['name'];
$email = $_POST['email'];
// process mail
}
}
您还应该使用过滤器来输入电子邮件:
另外,如果您决定稍后使用无线电/复选框,请对其使用isset()
。
<强>旁注:强>
您可以在表单中添加一个复选框,以检查是否已选中,并使用条件语句处理它。
脚注:
&#34;大多数字段都是&#34;必需&#34;我暂时使用验证码系统,但空白的电子邮件不断发布。&#34;
您的问题中没有任何验证码可以支持此功能。
<强> N.B:强>
必需属性仅适用于支持HTML5的浏览器。因此,如果您网站上的任何机器人或访问者使用的浏览器不支持HTML5,或者可以绕过它的技术,那么这也可能是另一个(贡献)因素。
答案 1 :(得分:2)
您需要对PHP进行验证。
http://www.w3schools.com/php/php_form_validation.asp
基本上您需要执行以下操作:
安全强>
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
验证
if (!empty($email)){
//your code to send email
}
如果你想检查不止一件事,你可以让它变得更复杂。
$fail_validation = FALSE;
if (empty($email)){
$fail_validation = TRUE;
}
if (empty($phone)){
$fail_validation = TRUE;
}
if ($fail_validation == FALSE){
//code to send mail goes here
}
请注意,这是非常基本的,您可能需要考虑一些额外的功能来保护PHP。我还建议使用蜜罐作为额外的安全层。 https://stackoverflow.com/a/22103646/2547075
答案 2 :(得分:0)
<textarea name="message" cols="80" rows="7" required="required"></textarea>
应该是
<textarea name="message" cols="80" rows="7" required></textarea>
您在撰写XHTML还是HTML?
还建议在服务器端进行验证。请参阅下面的答案,了解如何操作。
答案 3 :(得分:0)
但由于某种原因,您收到了空白的电子邮件,可能来自机器人
几乎回答了你的问题。机器人可以非常先进,并打破某些Captcha'a以及发布空白的帖子请求。您应该检查帖子请求是否为空。
牢不可破的验证码是您自己编写的(并且在您的网站变得流行之前不会传播它)或the recently introduced one from Google。尝试一下(一旦你检查了empty值)