2015-04-04 49 views
2

我有一個簡單的PHP頁面的HTML表單。它的設置讓你填寫表格並自動發送電子郵件到我的電子郵件。而不是發生這種情況,我沒有收到任何電子郵件,頁面重定向到「找不到文件(404錯誤)」。PHP郵件()函數導致404文件未找到頁面

這裏的PHP

<?php 

if (isset($_POST['submit'])){ 

    //Name 
    $Name = $_POST['Name']; 
    $Name = mysqli_real_escape_string($Name); 

    //Email 
    $Email = $_POST['Email']; 
    $Email = mysqli_real_escape_string($Email); 

    //Subject 
    $Subject = $_POST['Subject']; 
    $Subject = mysqli_real_escape_string($Subject); 

    //Message 
    $Message = $_POST['Message']; 
    $Message = mysqli_real_escape_string($Message); 

    $email_subject = $Subject . ' from: ' . $Email; 
    $email_from = $Email; 
    $email_body = $Message; 

    $webEmail = "[email protected]"; 
    $headers = "From: $email_from \r\n"; 
    $headers .= "Reply-To: $Email \r\n"; 
    $headers .= 'X-Mailer: PHP/' . phpversion(); 
    $headers .= 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 



    mail($webEmail,$email_subject,$email_body,$headers); 
} 
?> 

這裏的HTML表單

<form action="action_page.php" name="myform"> 
      <input onfocus="this.value='';" type="text" name="Name" value="Name" id="name"> 
      <input onfocus="this.value='';" type="text" name="Email" value="Email" id="email"> 
      <input onfocus="this.value='';" type="text" name="Subject" value="Subject" id="subject"> 
      <textarea onfocus="this.value='';" cols="50" rows="4" placeholder="Message" name="Message" id="message"></textarea> 
      <input type="submit" value="submit" id="submit"> 

     </form> 

任何想法?

+0

您正在使用localhost。 – 2015-04-04 21:10:14

+0

不,這是在我的網站上(使用godaddy託管網站,如果這很重要)。如果您希望查看聯繫表單的鏈接,請訪問www.lizbethmcgee.com/pages/Contact.php – 2015-04-04 21:13:00

+0

嘗試使用error_reporting_all獲取錯誤,並在發送後如果您沒有將任何消息導向任何頁面,將顯示空白頁。 – 2015-04-04 21:15:15

回答

5

這裏有一些錯誤。

讓我們從頂部開始並使用條件語句(並按照我們的方式下降)。

if (isset($_POST['submit'])){...} 

您的提交按鈕<input type="submit" value="submit" id="submit">沒有它的名稱屬性。

  • 你可能單靠一個「id」,這不起作用,它需要「name」屬性。

修改它,讓它爲讀取:

<input type="submit" name="submit" value="submit" id="submit"> 
  • 因爲它沒有被命名,即條件語句中什麼也不會執行。

然後您使用mysqli_real_escape_string()理論上要求連接傳遞給該函數。

即:

$Name = mysqli_real_escape_string($connection,$Name); 

,並會爲其他人一樣;假設你正在與數據庫交互。

但是,目前還不清楚您是否確實與您的數據庫進行了交互,因此如果您未與其交互,請從您的POST陣列中刪除所有這些mysqli_real_escape_string

即:

$Name = $_POST['Name']; 

,並做了別人不一樣。

你還缺少POST作爲表單的方法:

<form action="action_page.php" name="myform"> 

省略時候能得到它的默認值。因此,將其更改爲:

​​

然後,爲了檢查是否郵件已發送,改變

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

if(mail($webEmail,$email_subject,$email_body,$headers)){ 
echo "Sent"; 
} 

如果你看到 「已發送」,那麼郵件會做它的工作。如果沒有收到郵件,請檢查您的垃圾郵件。或者,您的服務器可能被列入黑名單。請確保您有權使用mail()

您還應該確保所有輸入都已使用條件empty()填充。

即:

if(!empty($_POST['Name'])){ 
// $Name = mysqli_real_escape_string($Name); 
    $Name = $_POST['Name']; 
    } 

添加error reporting到您的文件(S)的頂部,這將有助於找到錯誤。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

旁註:錯誤報告只應在分期完成,並且從不生產。


腳註:

我不知道這些是什麼,用於onfocus="this.value='';"所以,如果你有一些JS/AJAX發生的地方,你需要檢查這些。

  • 如果它們不用於任何事情,您可以刪除它們。

您還應該嘗試刪除value="Name"以及其他人以防萬一。

旁註:

如果你仍然得到一個404錯誤,然後嘗試把你的PHP在上面,下面,你的HTML表單,並用.php擴展名相同的文件裏面,做:

<form action="" name="myform" method="post"> 

使用action=""作爲在同一頁面上發生的動作。


附加註腳:

我在你放置在另一個答案評論注意到:

「我補充道頭(「位置:lizbethmcgee.com/pages/Contact。 php';);「

首先,確保你沒有在標題之前輸出。

此外,您還應該包括一個完整的http://電話和exit;

header("Location: http://www.lizbethmcgee.com/pages/Contact.php"); 
exit; 

避免代碼繼續執行可能存在低於,應該有包含任何。


由於AdamT在評論中指出:

發送郵件使用PHP mail命令,也不能保證郵件將到達您發送到收件箱。如前所述,垃圾郵件發送者有很多,不幸的是,垃圾郵件過濾程度很高。如果您確實希望有更好的機會收到郵件,請聯繫GoDaddy,並詢問他們如何爲您的帳戶設置SMTP電子郵件。

+1

使用php'mail'命令發送郵件,並不保證郵件將到達您發送給它的收件箱。如前所述,垃圾郵件發送者有很多,不幸的是,垃圾郵件過濾程度很高。如果您確實希望有更好的機會收到郵件,請聯繫GoDaddy,並詢問他們如何爲您的帳戶設置SMTP電子郵件。 – 2015-04-05 02:33:31

+0

@AdamT感謝Adam的評論,這是一個非常好的主意。我在答案中加了一句,引用你的話。 – 2015-04-05 02:35:23

+0

Fred - ii -Thanks。我喜歡這裏的討論,很多參與 - 應該對O.P很有幫助。 – 2015-04-05 02:38:41

0

如上所述,您的提交按鈕必須具有name="submit"屬性,否則您的if (isset($_POST['submit'])){...將不起作用。然而,我最近有這個確切的問題,不知何故偶然發現<input name="name">是責備。在你的情況下,<input name="Name">。一旦我將名稱屬性更新爲'用戶名',表單就完美運作了。雖然我一直無法找到這個怪癖的確切原因,但它肯定提高了我命名我的屬性,選擇器,變量等的意識......