php - 仅在按下提交按钮且表单有效后才尝试用 PHP 发送电子邮件

标签 php html forms email

我是 PHP 的新手,目前正在回归 HTML。我已经制作了一个表格并通过 PHP 发送和验证了数据,但我试图仅在数据经过验证且正确后才将电子邮件发送给自己。目前,如果页面已加载,我认为它会发送一封电子邮件,并且只要我点击提交而数据不正确,它就会发送。

这里是我验证数据的地方:

<?php
  //Set main variables for the data.
  $fname = $lname = $email = $subject = $website = $likedsite = $findoption = $comments = "";

  //Set the empty error variables.
  $fnameErr = $lnameErr = $emailErr = $subjectErr = $commentsErr = $websiteErr = $findoptionErr = "";

  //Check to see if the form was submitted.
  if ($_SERVER["REQUEST_METHOD"] == "POST")
  {
    //Check the 'First Name' field.
    if (empty($_POST["fname"]))
    {
      $fnameErr = "First Name is Required.";
    } 
    else
    {
      $fname = validate_info($_POST["fname"]);
    }

    //Check the 'Last Name' field.
    if (empty($_POST["lname"]))
    {
      $lnameErr = "Last Name is Required.";
    } 
    else
    {
      $lname = validate_info($_POST["lname"]);
    }

    //Check the 'E-Mail' field.
    if (empty($_POST["email"]))
    {
      $emailErr = "E-Mail is Required.";
    } 
    else
    {
      $email = validate_info($_POST["email"]);
      //Check if valid email.
      if (!filter_var($email, FILTER_VALIDATE_EMAIL))
      {
        $emailErr = "Invalid E-Mail Format.";
      }
    }

    //Check the 'Subject' field.
    if (empty($_POST["subject"]))
    {
      $subjectErr = "Subject is Required.";
    } 
    else
    {
      $subject = validate_info($_POST["subject"]);
    }

    //Check the 'Website' field.
    if (empty($_POST["siteurl"]))
    {
      $website = "";
    } 
    else
    {
      $website = validate_info($_POST["siteurl"]);
      //Check if valid URL.
      if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
      {
        $websiteErr = "Invalid URL.";
      }
    }

    //Check the 'How Did You Find Us' options.
    if (empty($_POST["howfind"]))
    {
      $findoptionErr = "Please Pick One.";
    } 
    else
    {
      $findoption = validate_info($_POST["howfind"]);
    }

    //Check the comment box.
    if (empty($_POST["questioncomments"]))
    {
      $commentsErr = "Questions/Comments are Required.";
    } 
    else
    {
      $comments = validate_info($_POST["questioncomments"]);
    }

    //Pass any un-required data.
    $likedsite = validate_info($_POST["likedsite"]);
  }

  function validate_info($data)
  {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
  }
?>

抱歉有点长。

这是我尝试发送电子邮件的地方。我尝试了两次不同的尝试,结果都一样。

    <?php
if (!empty($fnameErr) || !empty($lnameErr) || !empty($subjectErr) || !empty($emailErr) || !empty($commentErr) || !empty($websiteErr) || !empty($findoptionErr))
{
  echo "Sent!!";
}else
{
  echo"Not Sent!!";
}
  //Make the message.
  $message =
  "
  First Name: $fname.\n
  Last Name: $lname.\n
  Website: $website\n
  Did They Like the Site? $likedsite.\n
  How They Found Us. $findoption.\n
  Question/Comments:\n
  $comments.
  ";
  $message = wordwrap($message, 70);
  $headers = "From: $email";

  mail("me@gmail.com", $subject, $message, $headers);
?>

再次为篇幅感到抱歉。提前致谢也很抱歉,如果这是一个双重问题或描述不够,我也是堆栈溢出的新手。

最佳答案

请尝试:

<?php
  //Set main variables for the data.
  $fname = $lname = $email = $subject = $website = $likedsite = $findoption = $comments = "";

  //Set the empty error variables.
  $fnameErr = $lnameErr = $emailErr = $subjectErr = $commentsErr = $websiteErr = $findoptionErr = "";

  //Initialize variable used to identify form is valid OR not. 
  $formValid = true;

  //Check to see if the form was submitted.
  if ($_SERVER["REQUEST_METHOD"] == "POST")
  {
    //Check the 'First Name' field.
    if (empty($_POST["fname"]))
    {
      $formValid = false;//Form not validate
      $fnameErr = "First Name is Required.";
    } 
    else
    {
      $fname = validate_info($_POST["fname"]);
    }

    //Check the 'Last Name' field.
    if (empty($_POST["lname"]))
    {
      $formValid = false;//Form not validate
      $lnameErr = "Last Name is Required.";
    } 
    else
    {
      $lname = validate_info($_POST["lname"]);
    }

    //Check the 'E-Mail' field.
    if (empty($_POST["email"]))
    {
      $formValid = false;//Form not validate
      $emailErr = "E-Mail is Required.";
    } 
    else
    {
      $email = validate_info($_POST["email"]);
      //Check if valid email.
      if (!filter_var($email, FILTER_VALIDATE_EMAIL))
      {
        $formValid = false;//Form not validate
        $emailErr = "Invalid E-Mail Format.";
      }
    }

    //Check the 'Subject' field.
    if (empty($_POST["subject"]))
    {
      $formValid = false;//Form not validate
      $subjectErr = "Subject is Required.";
    } 
    else
    {
      $subject = validate_info($_POST["subject"]);
    }

    //Check the 'Website' field.
    if (empty($_POST["siteurl"]))
    {
      $website = "";
    } 
    else
    {
      $website = validate_info($_POST["siteurl"]);
      //Check if valid URL.
      if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
      {
        $formValid = false;//Form not validate
        $websiteErr = "Invalid URL.";
      }
    }

    //Check the 'How Did You Find Us' options.
    if (empty($_POST["howfind"]))
    {
      $formValid = false;//Form not validate
      $findoptionErr = "Please Pick One.";
    } 
    else
    {
      $findoption = validate_info($_POST["howfind"]);
    }

    //Check the comment box.
    if (empty($_POST["questioncomments"]))
    {
      $formValid = false;//Form not validate
      $commentsErr = "Questions/Comments are Required.";
    } 
    else
    {
      $comments = validate_info($_POST["questioncomments"]);
    }

    //Pass any un-required data.
    $likedsite = validate_info($_POST["likedsite"]);
  }


  //If every variable value set, send mail OR display error...
  if (!$formValid){
     echo"Form not validate...";

  } 
  else {
      //Make the message.
      $message =
      "
      First Name: $fname.\n
      Last Name: $lname.\n
      Website: $website\n
      Did They Like the Site? $likedsite.\n
      How They Found Us. $findoption.\n
      Question/Comments:\n
      $comments.
      ";
      $message = wordwrap($message, 70);
      $headers = "From: $email";

      mail("me@gmail.com", $subject, $message, $headers);


      if($sendMail){
        echo "Mail Sent!!";
      }
      else {
        echo "Mail Not Sent!!";
      }
  }

  function validate_info($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
  }
?>

我根据一些变化编辑我的答案。现在,此代码仅在表单必填字段不为空且所有字段值均根据您的验证有效时才允许发送邮件。

如果有任何问题,请告诉我!

关于php - 仅在按下提交按钮且表单有效后才尝试用 PHP 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349277/

相关文章:

php - 在 PHP 和 MySQL 中使用复选框 - 将 1 和 0 传入和传出数据库

Javascript:如果满足条件则隐藏元素

php - Symfony 中的无效表单,没有错误

Javascript:薪资计算器(无法显示正确的数字)

php - 如何在 AppFog 上运行 Laravel artisan 命令?

php - Paypal IPN 数据

php - 我似乎无法在 header.php 上动摇验证错误(如 "Stray start tag html")

PHP - .htaccess 干净的 URL 不起作用

eclipse - 三星 Galaxy S4 和 Phonegap 问题

php - 如何分离 PHP 中 while 循环中输出的复选框变量结果?