我有一个问题,希望你能帮助我。我创建了一个联系表单,其中包含所有已验证的字段和验证码,并且仍然收到大量垃圾邮件和空白提交。
有没有人对我能做些什么做出任何想法,以使表格不易受垃圾邮件和黑名单的影响
<form method="post" action="submit.php" data-abide id="cont-form">
<div data-abide-error class="alert callout" style="display: none;">
<p><i class="fi-alert"></i> There are some errors in your form.</p></div>
<input form="cont-form" type="text" name="yourname" placeholder="Your Name" required>
<input form="cont-form" type="email" name="email" placeholder="Your Email Address" required>
<span class="form-error">Your Email Address Is Invalid</span>
<input form="cont-form" type="text" name="phone" placeholder="Your Phone Number" required >
<span class="form-error">Please Enter A Valid Phone Number</span>
<input form="cont-form" type="text" name="hear" placeholder="How Did You Hear About Us?" required>
<textarea form="cont-form" placeholder="Your Message" type="text" name="message" required></textarea>
<label>What's 13+14 = </label><input form="cont-form" name="answer" type="text" />
<button type="submit" name="submit" value="submit message" class="button" data-text="submit message"><span>submit message</span></button>
<div class="clear"></div>
</form>
$answer = 27;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ($answer != $_POST['answer'] ) {
$hasError = true;
}else{
$content = '';
if($_POST["yourname"]){
$yourname = $_POST["yourname"];
}
if($_POST["email"]){
$email=$_POST["email"];
}
if($_POST["phone"]){
$phone=$_POST["phone"];
}
if(!empty($_POST["type"])){
$type=$_POST["type"];
}
if($_POST["hear"]){
$hear=$_POST["hear"];
}
if($_POST["message"]){
$message=$_POST["message"];
}
}
$content = "Name : " . $yourname . "<br>";
$content .= "Email : " . $email . "<br>";
$content .= "Phone : " . $phone . "<br>";
$content .= "Message : ". $message ."<br>";
$content .= "How Did You Hear? : ". $hear ."<br>";
if($hasError != true){
mail($sendToEmail,$subject,$content,$senderEmailId);
header("Location:thankyou.php");
exit();
}
else
{
?>
<script language="javascript">
alert("Sorry,An Error Occurred.Please Try After Some Time");
window.history.back();
</script>
<?php
}
答案 0 :(得分:0)
你应该用搜索引擎来看一下,真的 - 有很多建议。
一般来说,有很多方法,你很可能想要结合几个方法来获得令人满意的结果。大多数会对您的用户造成烦恼,最好的例子就是Captchas。无论您的决定是什么,请尽量使其尽可能方便用户使用。
我最喜欢的技术之一是蜜罐,这意味着您包含隐藏的表单字段。其中一些你留空,一些你预填充数据。在后端(PHP)中,然后测试字段是否仍保持预期值(为空或保存您放入的确切值)。大多数机器人只会盲目填写任何可用的字段。要使此方法更有效,请包含通过type="hidden"
隐藏的字段以及至少一个通过CSS隐藏的字段。另外,使用JavaScript填充其中一个,因为许多机器人不执行JavaScript,因此无法用(预期)值填充这些字段。
您可以做的另一件事是使用 badwords 定义字典,并过滤掉包含这些字词的提交数据。但是,您可能会意外地过滤掉实际的合法用户数据,因此在选择字典时要小心。
祝你好运。答案 1 :(得分:0)
基本上,在发送数据电子邮件之前,您需要先验证其有效性以避免空白条目。 如果按下提交按钮则 验证提交数据的有效性(重要字段不为空,有效的电子邮件等) 如果所有提交的数据都有效,那么 通过电子邮件或您想要的任何其他操作发送数据 else(如果某些数据无效) 显示错误而不提交任何内容。
以下是我在代码中看到的内容: 1- if(isset($ _ POST ['submit']))在开始处理表单之前,它只是告诉代码不要开始处理,除非按下提交按钮。 2-要避免空白条目,您只需要测试,使用if(!empty($ _ POST ['variable_name']))提交的每个条目都不是空白。 3-您还需要检查使用内置php函数提交的电子邮件地址的有效性,例如:$ filter_var($ _ POST ['email',FILTER_VALIDATE_EMAIL])如果提交的电子邮件有效,则返回true。
你也可能需要使用preg_match php函数对名称字段等中允许提交的字符类型进行一些约束。
这是一个可能有用的链接http://www.w3schools.com/php/php_form_complete.asp