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

时间:2016-08-16 14:30:48

标签: 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 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
 }

2 个答案:

答案 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