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

时间:2015-12-18 05:52:41

标签: 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);
?>

再次抱歉这个长度。如果这是一个双重问题或者没有充分描述,我也提前感谢对不起,我也是堆栈溢出的新手。

3 个答案:

答案 0 :(得分:0)

而不是写出冗长的条件。

  1. 将所有错误消息分配给单个变量并向其追加错误(sizeof(T))。这样做可以避免冗长的if else梯子。
  2. $errorMsg更改为empty($_POST["email"]) - 在所有陈述中。
  3. 然后将条件更新为以下,

    !isset($_POST["email"])

    简单一点,我希望这会有所帮助。

答案 1 :(得分:0)

从我能够设想的,你是

  1. 尝试在if条件中应用'OR'应该更改为AND,即更改||到&amp;&amp;

  2. 您正在检查非空的错误变量...应该更改以验证它们是否为空。

  3. if (empty($fnameErr) && empty($lnameErr) && empty($subjectErr) && empty($emailErr) && empty($commentErr) && empty($websiteErr) && empty($findoptionErr)) { echo "sent"; }

答案 2 :(得分:0)

请尝试:

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

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

如果有任何疑虑,请告诉我。!