我有一个简单的联系表单,用户输入他们的数据,表单将其发送到'mail.php',然后传递到那里的电子邮件帐户。 'mail.php'文件位于我的根目录和'index.html'之间,我遇到的问题是我不希望用户能够通过他们的浏览器直接访问http://mydomain.com/mail.php,因为这样只是发送一个空白表格,可以用来向我发送垃圾邮件。我真的很紧张,试图找出一种只允许表单访问'mail.php'的方法。这就是我设置表单的方式:
<form method="post" action="mail.php">
<div class="row half">
<div class="6u"><input type="text" required autocomplete="off" name="name" placeholder="Name" /></div>
<div class="6u"><input type="email" required autocomplete="off" name="email" placeholder="Email" /></div>
</div>
<div class="row half">
<div class="12u"><textarea name="message" required placeholder="Message" rows="6"></textarea></div>
</div>
<div class="row">
<div class="12u">
<ul class="actions">
<li><input type="submit" class="button" value="Send Message" /></li>
</ul>
</div>
</div>
</form>
然后我的'mail.php'文件设置如此,成功标题是一个html页面,其中包含几行文字,让用户知道他们的电子邮件已发送,然后将其重定向回{{3} 5秒后。
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$formcontent=" From: $name \n Message: $message";
$recipient = "me@email.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
header("Location: success");
exit;
?>
我已经摆弄了.htaccess和无数其他的东西,但我做的一切似乎都没有用 - 它会完全阻止页面(因此表单也无法访问它)或根本不阻止它。我也看过这个http://mydomain.com,但无法弄清楚如何让它工作。我是html和php的新手,但到目前为止我已经设法搞清楚了。我这次错过了什么?
答案 0 :(得分:3)
只需在PHP脚本中添加一些验证。例如:
<?php
if(isset($_POST['name'], $_POST['email'], $_POST['message'])) {
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$formcontent=" From: $name \n Message: $message";
$recipient = "me@email.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
header("Location: success");
exit;
}
?>
这将阻止任何空白提交,而不要求您通过引用页面进行过滤。作为一般规则,您应该始终验证用户输入,因为它是各种麻烦的来源(黑客,错误,通常是意外行为)。
答案 1 :(得分:2)
您无法阻止浏览器访问该页面 - 当浏览器提交表单时,它会导航到.php文件,就像用户直接输入其URL一样,唯一的区别就是提交了POST数据
如果您想阻止垃圾邮件,则需要确保输入正确无误。确保设置了必填字段。 (是的,Ed Cottrell更快,看到他的回答)
答案 2 :(得分:0)
您需要做的是验证输入,如果输入不正确,请不要发送表单。
if (empty($_POST['name'])) {
$errors[] = "You need to enter your name";
}
if (empty($_POST['email'])) {
$errors[] = "You need to enter your email";
}
if (empty($_POST['message'])) {
$errors[] = "You need to enter a message";
}
if (isset($errors)) {
echo "There were errors sending your email:";
echo "<ul>";
foreach ($errors as $error) {
echo "<li>$error</li>";
}
echo "</ul>";
}
else {
// send message
}