2017-08-17 34 views
1

我正在嘗試使HTML表單工作。php驗證表單不發送電子郵件

我的前端代碼是這樣的:

<form action="/form_validation.php" target="_blank"> 
    <p><input class="w3-input w3-padding-16" type="text" placeholder="name" required name="name"></p> 
    <p><input class="w3-input w3-padding-16" type="text" placeholder="email" required name="email"></p> 
    <p><input class="w3-input w3-padding-16" type="text" placeholder="subject" required name="subject"></p> 
    <p><input class="w3-input w3-padding-16" type="text" placeholder="comment" required name="comment"></p> 
    <p> 
     <button class="w3-button w3-light-grey w3-padding-large" type="submit"> 
      <i class="fa fa-paper-plane"></i> SEND MESSAGE 
     </button> 
    </p> 
</form> 
<p><?php echo $feedbackmsg;?></p> 

和文件form_validation.php包含此:

<?php 

$nameErr = $emailErr = $commentErr = $subjectErr = ""; 
$name = $email = $comment = $subject = ""; 
$feedbackmsg = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (isset($_POST['submit'])) { 
     if (empty($_POST["name"])) { 
      $nameErr = "*Name is required"; 
     } else { 
      $name = validate($_POST["name"]); 
      if (!preg_match("/^[a-zA-Z ]*$/", $name)) { 
       $nameErr = "*Only letters and white space allowed"; 
      } 
     } 

     if (empty($_POST["subject"])) { 
      $subjectErr = "*Subject is required"; 
     } else { 
      $subject = validate($_POST["subject"]); 
      if (!preg_match("/^[a-zA-Z ]*$/", $subject)) { 
       $SubjectErr = "*Only letters and white space allowed"; 
      } 
     } 

     if (empty($_POST["email"])) { 
      $emailErr = "*Email is required"; 
     } else { 
      $email = validate($_POST["email"]); 
      if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) { 
       $emailErr = "*Invalid email format"; 
      } 
     } 

     if (empty($_POST["comment"])) { 
      $commentErr = "*Write Me something"; 
     } else { 
      $comment = validate($_POST["comment"]); 
     } 

     if (empty($nameErr) && empty($emailErr) && empty($commentErr)) { 
      $to = "[email protected]"; 
      $subject = $name; 
      mail($to, $subject, $comment, $email); 
      $feedbackmsg = "Your message has sent,<br> thanks"; 
     } 
    } 
} 

所以,當觸發的動作就返回一個空白頁與我summury以下網址: 的mysite .com/form_validation.php?name = anastasios & email = myemail%40hotmail.com & subject = mysubject & comment = ena + dio + ena + dio

我認爲這是正常的。但爲什麼我沒有任何電子郵件,如果它正常工作? 有什麼想法?非常感謝

回答

0

你的所有邏輯都包裹在這種情況下:

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

而這種情況(以及隨後的條件內,如果代碼有他們)是false因爲你使用GET而不是POST。在您的表單中指定POST方法:

<form action="/form_validation.php" target="_blank" method="post"> 
+0

哦是的,但即使這樣我得到新的空白頁與url mysite.com/form_validation.php,仍然沒有得到任何郵件。 而不是action =「form_validation」我嘗試過action =「<?php mail()?>」,並且可以獲取電子郵件,但沒有任何提示。當然,我不喜歡在沒有驗證的情況下以這種方式獲取電子郵件,但只是嘗試其他方式來確保我的表單能夠正常工作。 – fxp869

+0

@ fxp869:做一些調試。該頁面爲空白,因爲您從不輸出任何內容。 (或者因爲出現錯誤而且沒有打開錯誤報告。)檢查PHP日誌,添加某種輸出以測試邏輯,等等。您的代碼不是完全可用或者完全不可用的黑盒子,工作。你可以調試它。 (沒有,'action =「<?php mail()?>」'不會像你期望的那樣遠程執行任何操作。只是隨機移動代碼不會被調試。) – David

-1

希望這可以幫到你。更改爲此

<p><input class="w3-input w3-padding-16" type="emiail" placeholder="email" required name="email"></p>