2013-03-18 96 views
0

所以我試圖讓聯繫框工作,它確實工作。但是每當有人點擊聯繫人頁面時,它會自動發送一封空白電子郵件。如何阻止這個?!PHP的聯繫方式腳本在頁面加載時發送電子郵件

PHP

<?php $name = $_POST['name']; 
$email = $_POST['email']; 
$message = $_POST['message']; 
$formcontent="From: $name \n Message: $message"; 
$recipient = "[email protected]"; 
$subject = "Contact Form"; 
$mailheader = "From: $email \r\n"; 
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 
echo "Thank You!" . " -" . "<a href='index.html'> Return Home</a>"; 
?> 

HTML

<form action="contact.php" method="POST"> 
<p>Name</p> <input type="text" name="name"> 
<p>Email</p> <input type="text" name="email"> 
<p>Message</p><textarea name="message" rows="6" cols="25"></textarea><br /> 
<input type="submit" value="Send"><input type="reset" value="Clear"> 
</form> 

在此先感謝:(

回答

5

您需要檢查是否有POST請求作出,且只能執行郵件代碼,如果是這樣的話:

if ($_SERVER['REQUEST_METHOD'] === 'POST') 
{ 
    // your php code (first block in your question) 
} 
+1

謝謝JEROEN!固定。 – 2013-03-18 21:59:35

1

這是因爲您在頁面加載時致電mail()。如果您只希望在提交表格(我懷疑)時執行此操作,請在致電mail()之前檢查您的某些$_POST變量是否存在。

if (isset($_POST['foo'])) 
{ 
    //do stuff here 
} 
1

你的頁面必須測試的$_POST陣列的內容發送電子郵件之前:

<?php 
    if (!is_empty($_POST)) { 
     if (isset($_POST['email']) && isset($_POST['name']) && isset($_POST['message'])) { 
      // code to send email as in your question code snippet 
     } else { 
      // optionally display an error message 
     } 
    } 
?> 
+0

實際上首先檢查是否確實收到POST請求是在最外括號中處理的正確方法,請參閱@jeroen答案。 – didierc 2013-03-18 22:01:41