【问题标题】:My contact form will not validate its input fields. It will submit an email to me while my input fields are blank. Any suggestions?我的联系表单不会验证其输入字段。当我的输入字段为空白时,它将向我提交一封电子邮件。有什么建议么?
【发布时间】:2016-10-08 03:32:39
【问题描述】:

如前所述,我的 php 联系表单会向我发送一封空白电子邮件,但是它不会验证空输入值。有什么建议么?我已经尝试了所有我知道要做的事情。

我还想知道是否有一种方法可以在提交时重定向到thankyou.html 页面。我记得 php 类似于“header ...”来重定向。

 if (isset($_POST["submit"])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $from = 'Demo Contact Form'; 
    $to = 'email@example.com'; 
    $subject = 'Message from Contact Demo ';

    $body = "From: $name\n E-Mail: $email";

    // Check if name has been entered
    if (!$_POST['name']) = 0; {
        $errName = 'Please enter your name';
    }

    // Check if email has been entered and is valid
    if (!$_POST['email'] || !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) {
        $errEmail = 'Please enter a valid email address';
    }

 // If there are no errors, send the email
 if (!$errName && !$errEmail) {
    if (mail ($to, $subject, $body, $from)) {
    $result='<div class="alert alert-success">Thank You! I will be in touch</div>';
} else {
    $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>';
    }
   }
 }
  ?>

HTML...

 <!--FORM-->
 <form role="form" action="contact.php" method="post" class="form-horizontal align-center">
 <div class="form-group col-centered">
  <label class="control-label col-sm-4 text-align-center">NAME</label>
    <div class="control col-sm-4">
        <input type="text" id="name" name="name" class="form-control">
          <?php echo "<p class='text-danger'>$errName</p>";?> 
    </div>
  </div>

 <div class="form-group col-centered">
  <label class="control-label col-sm-4 text-align-center">EMAIL</label>
    <div class="control col-sm-4">
        <input type="text" id="email" name="name" class="form-control">
          <?php echo "<p class='text-danger'>$errEmail</p>";?> 
    </div>
 </div>

 <div class="form-group">
  <label class="control-label  col-sm-4 text-align-center">PHONE</label>
    <div class="col-sm-4">
        <input type="text" name="phone" class="form-control">
    </div>
  </div>
  <div class="control-group">
    <div class="controls">
        <button type="submit" name="submit" value="submit" class="btnSize btn btn-default btn-lg"><strong>SAVE $150</strong></button>
    </div>
  </div>
 </form>

感谢您的宝贵时间。

【问题讨论】:

  • if (!$_POST['name']) = 0; { 一方面,失败有两个原因。另外,邮件的“发件人”需要一个电子邮件地址。
  • 我早先这样做了,但出于某种原因删除了它!我会再试一次。
  • 您的代码包含太多错误。看看这个formget.com/php-contact-form 看起来不错的代码。或code.tutsplus.com/tutorials/…
  • @Fred-ii- 我是 php 和联系表单的新手,令人失望的是它有错误。我会通读这些教程。谢谢。
  • @Fred-ii- 第一个链接实际上有一个错误,电子邮件正则表达式只匹配 w@w.ww-(+)@w-(+).w-(+) 他们在他们的字符类中得到了 [\w-]+ 斜杠。 /([w-]+@[w-]+.[w-]+)/ 或者它在页面上呈现错误,只是说。 :-D

标签: php forms validation contact-form


【解决方案1】:

这是我的看法:

if (isset($_POST["submit"])) {
    $name = !empty( $_POST['name'] ) ? $_POST['name'] : false;
    $email = !empty( $_POST['email'] ) ? filter_var($_POST['email'],FILTER_VALIDATE_EMAIL) : false;

    if( $name && $email ){

        $from = 'Demo Contact Form';
        $to = 'email@example.com';
        $subject = 'Message from Contact Demo ';

        $body = "From: $name\n E-Mail: $email";

        if (mail ($to, $subject, $body, $from)) {
            $result='<div class="alert alert-success">Thank You! I will be in touch</div>';
        } else {
            $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>';
        }
    }else{
        $errors = [];
        if( !$name ) $errors [] ='Invalid Name entered';

        if( !$email ) $errors [] ='Invalid Email entered';

        $result= '<div class="alert alert-danger">'.implode('<br>', $errors ).'</div>';
    }
}

filter_var() 在失败时返回过滤后的 var 或 false,因此使用它和三元 {if} ? true : false; 我们可以规范化您的输入以及之后的所有内容。

我们会尽快检查输入,这样我们就可以根据需要运行尽可能少的代码来获得最终结果。我们马上就知道它们是否良好并且可以跳过大部分电子邮件代码,并输出我们的错误消息。

逻辑上我们可以转储错误标志,否则我们知道一个或两个输入都是假的。数组和内爆只是插入换行符的一种更简单的方法。只需在代码更改最少的情况下添加另一个输入,也更容易扩展。如您所见,添加另一个三元语句、and 条件和错误消息非常容易。 (只有 2.5 行)

除此之外我会做的一件事就是这个

 $post = array_map('trim', $_POST);

然后将所有$_POST 更改为$post,这将解释复制和粘贴中添加为空格或额外空格的名称,这是常见的情况。

进一步你也许可以减少这样的错误

}else{
    $result= '<div class="alert alert-danger">'.implode('<br>', array_filter([
        $name ? false : 'Invalid Name entered',
        $email ? false : 'Invalid Email entered',
    ])).'</div>;
}

【讨论】:

  • 嘿,谢谢,我会检查这些。我遵循了关于清理和验证此处另一条评论中提到的所有内容的不同教程。有很多东西要学!我认为如果不参考所有内容,我将无法进行开发。
  • 我已经做了将近 7 年了,只是需要时间和练习。
  • 我从 2009 年开始!大声笑,但公平地说,我选择了平面设计,并且有一些关于网页设计的课程。我只是碰巧进入了开发领域,但从未真正超越 html/css。现在我在 IT 部门,我已经学习了 java、js、sql 和一堆其他垃圾。但令人惊讶的是,我仍然需要不断地研究。虽然是 php 新手!
猜你喜欢
  • 1970-01-01
  • 2019-11-26
  • 2015-09-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多