簡體   English   中英

聯系人表格未顯示錯誤消息或發送電子郵件

[英]Contact Form not showing error messages or sending email

在開始討論之前,我想說這確實是從本地服務器發送電子郵件的,所以我已完成所有設置。 添加此表單驗證后,它將不再發送電子郵件或顯示錯誤。 它只是刷新頁面。 我是php編碼的新手,所以我確定我只是有一個if語句的順序錯誤或類似的東西。

HTML

<section id="contact">
            <h1 class="section-header">Contact Us Directly</h1>
            <h4 class="text-center">Have any quesitons not answered in the <span><a href="questions.php">Questions Page</a></span>.</h4>
            <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
                <label for="fname">First Name</label>
                <input type="text" id="fname" name="firstname" value="<?php $firstname ?>" placeholder="Your name.." tabindex="1" autofocus>
                <span class="error"><?php $firstname_error ?></span>
                <label for="lname">Last Name</label>
                <input type="text" id="lname" name="lastname" value="<?php $lastname ?>" placeholder="Your last name.." tabindex="2">
                <span class="error"><?php $lastname_error ?></span>
                <label for="email">Email</label>
                <input type="text" id="email" name="email" value="<?php $email ?>" placeholder="Your email.." tabindex="3">
                <span class="error"><?php $email_error ?></span>
                <label for="message">Message</label>
                <textarea id="subject" name="message" value="<?php $message ?>" placeholder="Write something.." style="height:200px" tabindex="4"> </textarea>
                <span class="error"><?php $message_error ?></span>
                <input type="submit" value="Submit" tabindex="5"> 
                <span class="success"><?php $success ?></span>
            </form>
        </section>

的PHP

<?php

$firstname_error = $lastname_error = $email_error = $message_error = "";
$firstname = $lastname = $email = $message = $success = "";

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

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

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

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


if ($firstname_error == '' and $lastname_error == '' and $email_error == '' and $message_error == '' ){
      $message_body = '';
      unset($_POST['submit']);
      foreach ($_POST as $key => $value){
          $message_body .=  "$key: $value\n";
      }

      $EmailFrom = localhost;
      $EmailTo = "testrepairmail69@gmail.com";
      $Subject = "New Order From tabletscreenfixer.com";
      if (mail($EmailTo, $Subject, $message)){
          $success = "Message sent, thank you for contacting us!";
          $firstname = $lastname = $email = $message = '';
      }
  }

}



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

?>

正如@R Smith所提到的,您的代碼正在尋求一些改進。 盡管如此,該版本仍然有效; 我已經在我的電腦上測試過。 檢查圖像

 <?php

  $firstname_error = $lastname_error = $email_error = $message_error = "";
  $firstname = $lastname = $email = $message = $success = "";

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

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

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

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


if ($firstname_error == '' and $lastname_error == '' and $email_error == '' and $message_error == '' ){
    $message_body = '';
    unset($_POST['submit']);
   // var_dump($_POST); exit();
    foreach ($_POST as $key => $value){
        $message_body .=  "$key: $value\n";
    }
    $EmailFrom = "test@gamil.com";
    $EmailTo = "tabletscreenfixer.com";//-> the message will be sent to this address if you have configure mail stuff well
    $Subject = "New Order From tabletscreenfixer.com";
    if (mail($EmailTo, $Subject, $message)){
        $success = "Message sent, thank you for contacting us!";
        $firstname = $lastname = $email = $message = '';
    }else{
        echo "Failure";
    }
 }else{
    echo "Failure 2";
   }
 }
    function test_input($data) {
       $data = trim($data);
       $data = stripslashes($data);
       $data = htmlspecialchars($data);
       return $data;
    }
 ?>

<html>
<head>
    <title>Test</title>
</head>
<body>
<section id="contact">
    <h1 class="section-header">Contact Us Directly</h1>
    <h4 class="text-center">Have any quesitons not answered in the <span><a href="questions.php">Questions Page</a></span>.</h4>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
        <label for="fname">First Name</label>
        <input type="text" id="fname" name="firstname" value="<?php echo $firstname ?>" placeholder="Your name.." tabindex="1" autofocus>
        <span class="error"><?php echo $firstname_error ?></span>
        <label for="lname">Last Name</label>
        <input type="text" id="lname" name="lastname" value="<?php echo $lastname ?>" placeholder="Your last name.." tabindex="2">
        <span class="error"><?php echo $lastname_error ?></span>
        <label for="email">Email</label>
        <input type="text" id="email" name="email" value="<?php echo $email ?>" placeholder="Your email.." tabindex="3">
        <span class="error"><?php echo $email_error ?></span>
        <label for="message">Message</label>
        <textarea id="subject" name="message" value="<?php echo $message ?>" placeholder="Write something.." style="height:200px" tabindex="4"> </textarea>
        <span class="error"><?php echo $message_error ?></span>
        <input type="submit" value="Submit" tabindex="5">
        <span class="success"><?php $success ?></span>
    </form>
</section>
</body>
</html>

編輯:輸入值屬性中缺少回波; 希望能幫助到你;

添加一些調試。 例如,在任何有錯誤的地方,增加一個錯誤計數器。 像這樣:

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

然后,最后,而不是long if條件:

if ($firstname_error == '' and $lastname_error == '' and $email_error == '' and $message_error == '' ){

您可以使用類似:

if ($errors == 0){

表示沒有錯誤。 然后,在其中嘗試發送郵件時,檢查是否失敗:

  if (mail($EmailTo, $Subject, $message)){
      $success = "Message sent, thank you for contacting us!";
      $firstname = $lastname = $email = $message = '';
  }
  else {
      echo "The mail command failed!!";
  }

最后,僅在您的測試階段就給自己提供一些指示,指出存在錯誤。 您可以刪除其他內容(甚至添加更好的樣式並保留它):

if ($errors == 0){

 // snip - lines of code in here removed to keep this snippet readable. this is your test and send mail logic.

}
else {
  echo "You've got $errors errors!  You need to correct them!";
}

通過這些更改,您應該能夠快速找到問題。 正如我所說,完成調試后,您還可以刪除一些代碼(例如echo語句)。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM