如何进行正确的php表单验证

如何进行正确的php表单验证,php,validation,Php,Validation,我有一个问题,希望你能帮助我。我已经创建了一个带有所有已验证字段和验证码的联系表单,但仍然收到大量垃圾邮件和空白提交 有没有人知道我能做些什么来减少表格中的垃圾邮件和黑条 <form method="post" action="submit.php" data-abide id="cont-form"> <div data-abide-error class="alert callout" style="display: none;"> <p><i

我有一个问题,希望你能帮助我。我已经创建了一个带有所有已验证字段和验证码的联系表单,但仍然收到大量垃圾邮件和空白提交

有没有人知道我能做些什么来减少表格中的垃圾邮件和黑条

 <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
 }

您的表单中有一些错误

您的电子邮件地址无效 请输入有效的电话号码 13+14等于多少 提交消息 $answer=27; 如果($\u服务器['REQUEST\u METHOD']=='POST'){ 如果($answer!=$\u POST['answer'])){ $hasError=true; }否则{ $content=''; 如果($_POST[“yourname”]){ $yourname=$_POST[“yourname”]; } 如果($_POST[“email”]){ $email=$_POST[“email”]; } 如果($_POST[“phone”]){ $phone=$_POST[“phone”]; } 如果(!空($_POST[“type”])){ $type=$_POST[“type”]; } 如果($_POST[“hear”]){ $hear=$_POST[“hear”]; } 如果($_POST[“message”]){ $message=$_POST[“message”]; } } $content=“Name:”.$yourname.“
”; $content.=“电子邮件:”.$Email.“
”; $content.=“电话:”.$Phone.“
”; $content.=“消息:”.$Message.“
”; $content.=“你是怎么听到的?”:“$Hear。”
”; 如果($hasError!=true){ 邮件($sendToEmail,$subject,$content,$senderEmailId); 标题(“位置:thankyou.php”); 退出(); } 其他的 { ?> 警报(“抱歉,发生错误。请稍后再试”); window.history.back();
你真的应该用搜索引擎来查一下,有很多建议。

一般来说,有很多种方法,你很可能希望将几种方法结合起来以获得满意的结果。大多数方法都会让你的用户感到烦恼,最好的例子就是验证码。无论你决定使用什么方法,都要尽可能使其对用户友好

我最喜欢的技术之一是蜜罐,这意味着您包括隐藏的表单字段。其中一些字段保留为空,一些字段预填充数据。然后在后端(PHP)中测试字段是否仍然保留预期值(为空或保留您输入的确切值)。大多数机器人只会盲目地填充任何可用字段。为了使此方法更有效,请包含通过
type=“hidden”
隐藏的字段,再加上至少一个通过CSS隐藏的字段。此外,使用JavaScript填充其中一个字段,因为许多机器人不执行JavaScript,因此无法使用(预期的)填充这些字段价值观

您可以做的另一件事是使用坏词定义词典,并过滤掉包含这些词的提交数据。但是,您可能会意外地过滤掉实际的合法用户数据,因此在选择词典时要小心


祝你好运。

基本上,在发送数据电子邮件之前,你需要首先验证数据的有效性,以避免出现空白条目。 如果按下提交按钮,则 验证提交数据的有效性(重要字段不为空,有效电子邮件…等) 如果所有提交的数据均有效,则 通过电子邮件或任何其他你想做的动作发送数据 else(如果某些数据无效) 显示错误,不提交任何内容

以下是我在您的代码中看到的缺失: 1-如果在开始处理表单之前设置了(isset($\u POST['submit']),它只是告诉代码不要开始处理,除非按下submit按钮。 2-为了避免出现空白条目,您只需使用if(!empty($\u POST['variable\u name'])测试提交的每个条目是否为空白。 3-您还需要使用内置php函数检查提交的电子邮件地址的有效性,如:$filter\u var($\u POST['email',filter\u VALIDATE\u email]),如果提交的电子邮件有效,该函数将返回true

此外,您可能需要使用preg_match php函数对名称字段等中允许提交的字符类型设置一些限制


这里有一个可能有用的链接

“13+14是什么?”这不是一个验证码,它只是一个简单的数学问题,就像文本一样。使用一些常见的和现代的验证码,如果你把它显示为一个图像,如果你随机改变数字,最终改变操作符…并在图片中添加一些噪音…或者只是坚持使用marketOP中的一个验证码,你就没有标记错误如果你不回答问题,那么如果你继续不接受答案,人们将来会越来越不可能帮助你。如果你找到了自己的答案,那么你也可以接受答案。对于您的问题,请记住您可以回答自己的问题,然后将自己的答案标记为已接受。