PHP形式的函数顺序

时间:2015-01-19 16:52:12

标签: php

好的,我再试一次,这次我删除了多个php打开/关闭标签。所以下面是一大堆php代码。如果我填写表格并发送,重定向工作,我收到电子邮件 - 这一切都很好。最后一个问题是验证 - 我可以提交空字段并重定向到thankyou页面 - 它不会警告用户填写字段......

那么为什么现在验证不起作用?谢谢你的帮助。

<?php
// define variables and set to empty values
$fname = $lname = $email = $phone = $location = $size = $pvtype = $message = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $company = test_input($_POST["company"]);
  $fname = test_input($_POST["first-name"]);
  $lname = test_input($_POST["last-name"]);
  $email = test_input($_POST["email"]);
  $phone = test_input($_POST["phone"]);
  $address = test_input($_POST["address"]);
  $city = test_input($_POST["city"]);
  $provincestate = test_input($_POST["provincestate"]);
  $country = test_input($_POST["country"]);
  $location = test_input($_POST["location"]);
  $size = test_input($_POST["size"]);
  if(isset($_POST["type"])){ $type = $_POST['type'];}
  $message = test_input ($_POST["message"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

// define variables and set to empty values
 $companyErr = $fnameErr = $lnameErr = $emailErr = $phoneErr = $addressErr = $cityErr = $provincestateErr = $countryErr = $locationErr = $sizeErr = $typeErr = $messageErr ="";
 $company = $fname = $lname = $email = $phone = $address = $city = $provincestate = $country = $location = $size = $type ="";

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    if (empty($_POST["company"])) {
    $company = "";
  } else {
    $company = test_input($_POST["company"]);
  } 

   if (empty($_POST["first-name"])) {
    $fnameErr = "First name is required";
  } else {
    $fname = test_input($_POST["first-name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$fname)) {
      $fnameErr = "Only letters and white space allowed"; 
    }
  }     

  if (empty($_POST["last-name"])) {
    $lnameErr = "Last name is required";
  } else {
    $lname = test_input($_POST["last-name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$lname)) {
      $lnameErr = "Only letters allowed"; 
    }
  }

  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Invalid email format"; 
    }
  }

  if (empty($_POST["phone"])) {
    $phoneErr = "Phone number is required";
  } else {
    $phone = test_input($_POST["phone"]);
    // check if phone number only contains 10 digits with no formatting
    if (!preg_match("/^[0-9]{10}+$/",$phone)) {
      $phoneErr = "Only enter a 10 digit number"; 
    }
  }

  if (empty($_POST["address"])) {
    $address = "";
  } else {
    $address = test_input($_POST["address"]);
  } 

   if (empty($_POST["city"])) {
    $city = "";
  } else {
    $city = test_input($_POST["city"]);
  }

  if (empty($_POST["provincestate"])) {
    $provincestate = "";
  } else {
    $provincestate = test_input($_POST["provincestate"]);
  }

  if (empty($_POST["country"])) {
    $country = "";
  } else {
    $country = test_input($_POST["country"]);
  }


  if (empty($_POST["location"])) {
    $locationErr = "Location is required";
  } else {
    $location = test_input($_POST["location"]);
    // check if location only contains letters
    if (!preg_match("/^[a-zA-Z ]*$/",$location)) {
      $locationErr = "Please enter a city"; 
    }
  }

 if (empty($_POST["size"])) {
    $sizeErr = "Please enter a number";
  } else {
    $size = test_input($_POST["size"]);
  }

  if (empty($_POST["type"])) {
    $typeErr = "Please select 1";
  } else {
    $type = test_input($_POST["type"]);
  }

   if (empty($_POST["message"])) {
    $message = "";
  } else {
    $message = test_input($_POST["message"]);
  }
}

$myemail = 'dgillison@sentinelsolar.com';//<-----Put Your email address here.

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $to = $myemail; 
    $email_subject = "Inquiry from: $fname $lname";
    $email_body = "You have received a new inquiry from:".
    "\n
     \n Name: $fname $lname \n Email: $email \n Phone Number: $phone
     \n Address: $address \n City: $city \n Province/State: $provincestate \n Country: $country
     \n I have a project in: $location \n The project type is: $type  \n The estimated project size is: $size
     \n Message: $message"; 

    $headers = "From: $myemail\n"; 
    $headers .= "Reply-To: $email";

    mail($to,$email_subject,$email_body,$headers);

    //redirect to the 'thank you' page
    header('Location: thankyou.html');
    exit();
}
?>

2 个答案:

答案 0 :(得分:1)

header()必须在任何输出之前出现,因此在底部使用它将无效。现在你没有真正的电子邮件'功能'。您可以将该底部代码包装到sendEmail函数中。然后将调用放在if ($_SERVER["REQUEST_METHOD"] == "POST") {末尾的函数中。 您必须将所有变量传递给函数。或者你可以通过$ _POST并在一个函数中进行变量清理。

答案 1 :(得分:0)

将电子邮件部分移到html之上,之前它自动重定向。在发送电子邮件和重定向之前,您需要添加一个检查以查看是否有帖子请求。在设置$ myemail之后,有一个开放式括号。将其更改为:

if ($_SERVER["REQUEST_METHOD"] == "POST") {