2017-01-10 66 views
0

我不知道我在做什麼錯。我正在嘗試使用PHP來聯繫我的形式。下面是代碼:使用php發送表單數據,但不發送

<?php 
if($_POST["submit"]) { 
    $recipient="[email protected]"; 
    $subject="Form to email message"; 
    $Name=$_POST["Name"]; 
    $Email=$_POST["Email"]; 
    $Reason=$_POST["Reason"]; 
    $Message=$_POST["Message"]; 

    $mailBody="Name: $Name\nEmail: $Email\n\n$Reason $Message"; 
    mail($recipient, $subject, $mailBody, "From: $Name <$Email>"); 
    $thankYou="<p>Thank you! Your message has been sent.</p>"; 
} 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <link rel="stylesheet" type="text/css" href="QDPicks.css"> 
     <title> QDPicks</title> 
    </head> 
    <body> 
     <header> 
      <a class="btn btn-primary btn-lg" href="QDPicks.html" role="button">Home</a> 
      <a class="btn btn-sample btn-lg active pull-right" href="QDPicksContactUs.html" role="button">Contact Us</a> 
      <a class="btn btn-sample btn-lg pull-right" href="QDPicksCompany.html" role="button">Company</a> 
      <a class="btn btn-sample btn-lg pull-right" href="QDPicksProducts.html" role="button">Products</a> 
     </header> 
     <header><p1>Contact Us</p1></header> 
     <form method="post" action="QDPicksContactUs.php > 
      <div class="form-group"> 
       <label for="InputReason1"></label> 
       <input type="text" class="form-control" id="InputReason1" name="Name"> 

       <label for="exampleInputEmail1"></label> 
       <input type="email" class="form-control" id="exampleInputEmail1" name="Email"> 

       <label for="InputReason1"></label> 
       <input type="text" class="form-control" id="InputReason1" name="Reason"> 
      </div> 
      <div class="form-group"> 
       <textarea type="text" class="form-control" rows="3" name="Message">  </textarea> 
       <p3 class="help-block">Explain on the reason for contact.</p3> 
      </div> 
      <div class="checkbox"> 
      </div> 
      <button type="submit" class="btn btn-default">Submit</button> 
     </form> 
     <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"> </script> 
    </body> 

    <!-- Latest compiled and minified CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

    <!-- Optional theme --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 

    <!-- Latest compiled and minified JavaScript --> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 

</html> 

當我把我的信息並點擊提交數據消失就像它已經發送了電子郵件,但沒有電子郵件已經來到了也對不起 - 因爲某些原因某些代碼得到了削減。但它不是關鍵部分。

+0

你在使用localhost嗎?什麼是錯誤? –

+0

你是否檢查過,當你點擊提交按鈕時你會得到帖子的參數? – Sona

+0

不使用記事本來編碼。考慮一個IDE像PHPStorm – CodeGodie

回答

0

你忘了把行動=」 QDPicksContactUs.php

這一行

<form method="post" action="QDPicksContactUs.php" > 

更換您的標籤可能是這種變化後您的代碼工作

0

首先在這裏缺少一個雙引號

<form method="post" action="QDPicksContactUs.php > 

此外,如果您在同一頁面發帖,則無需在操作中提供頁面名稱。

像標籤添加名稱:

<button name="submit" type="submit" class="btn btn-default">Submit</button> 

最後用if(isset($_POST["submit"]))

而且,你在本地主機上運行的代碼替換if($_POST["submit"])

+0

我有我的代碼與godaddy託管,它使用cpanel –

+0

你修復工作!謝謝! –

+0

這很好。請標記爲已解決。 –

0

讓我們專注於發送電子郵件的代碼。請閱讀我的評論。

if($_POST["submit"]) { 

    // you probably shouldn't post a real email here on SO 
    $recipient="[email protected]"; 
    $subject="Form to email message"; 

    // you should validate this field if you are sticking it in your mail headers as you do below. 
    $Name=$_POST["Name"]; 

    // you should DEFINITELY validate this before trying to send mail 
    $Email=$_POST["Email"]; 
    $Reason=$_POST["Reason"]; 
    $Message=$_POST["Message"]; 

    $mailBody="Name: $Name\nEmail: $Email\n\n$Reason $Message"; 

    // first, you don't even bother checking to see if this returns TRUE 
    // secondly, because you don't validate $Name or $Email, this command is vulnerable to Mail Header Injection 
    mail($recipient, $subject, $mailBody, "From: $Name <$Email>"); 

    $thankYou="<p>Thank you! Your message has been sent.</p>"; 
} 

所以你的形式是不好的,因爲你不驗證什麼,你不檢查,看看郵件命令的實際返回一個成功的結果,這是容易Mail Header Injection

首先,驗證$名稱:

$Name=$_POST["Name"]; 
    if (!preg_match('/^[a-zA-Z_\-]+$/', $Name)) { 
     die("sorry! Name is not valid"); 
    } 

其次,驗證$電子郵件

$Email = $_POST["Email"]; 
    if (!filter_var($Email, FILTER_VALIDATE_EMAIL)) { 
     die("Sorry, email is not valid"); 
    } 

三,檢查您的郵件功能的結果。如果它返回FALSE或其他空值,出現了問題 - 儘管如果不詢問系統管理員查看郵件日誌,我們可能無法找到答案。

if (!mail($recipient, $subject, $mailBody, "From: $Name <$Email>")) { 
     die("OH NO. The mail function did not work."); 
    } 

考慮閱讀的manual上的郵件功能:

返回TRUE 如果郵件被成功接受交付,FALSE否則。

重要的是要注意,僅僅因爲郵件被接受交付,並不意味着郵件實際上會到達預定的目的地。