2013-03-18 97 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