所以我试图学习PHP,但我遇到了某些代码的问题。
我想要实现的是我的网站上有一个非常简单的评论表单,访问者可以使用它向我发送电子邮件,但我收到了大量垃圾邮件。
所以我想做的是放入一个隐藏的空字段然后只发送电子邮件,如果它是空的。如果任何人有建议他们将非常感激。
这是我的HTML代码:
<form id="contact" name="contact" method="post" action="send.php">
<h3 class="send-comments-hdr">Your Comments?</h3>
<ul class="form-holder">
<li><label for="name" class="comment-labels">Name</label></li>
<li><input type="text" name="name" id="name" class="comment-inputs" placeholder="Your Name"/></li>
<li><label for="email-input" class="comment-labels">Email</label></li>
<li><input type="email" name="email" id="email-input" class="comment-inputs" placeholder="your.name@example.com" /></li>
<li><label for="comments" class="comment-labels">Comments</label></li>
<li><textarea name="comments" id="comments" class="comment-inputs" rows="4"></textarea></li>
<li class="center"><button id="send-comments" type="submit" class="send-button">Send</button></li>
</ul>
</form>
我的PHP发送文件:
<?
$parent = $_SERVER["HTTP_REFERER"];
$name = $_POST['name'];
$email = $_POST['email'];
$comments = $_POST['comments'];
$to = "myemail@gmail.com";
$subject = "Comments From a Website Visitor";
$message = "<p>A visitor from mydomain.com has left the following comments:</p>";
$message .= '<html><body>';
$message .= '<table rules="all" style="border-color: #666" cellpadding="10">';
$message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>" . $name . "</td></tr>";
$message .= "<tr><td><strong>Email:</strong> </td><td>" . $email . "</td></tr>";
$message .= "<tr><td><strong>Comments:</strong> </td><td>" . $comments . "</td></tr>";
$message .= "</table>";
$message .= "</body></html>";
$message .= "<p>Please reply ASAP, Thank you.</p>";
$headers = "From: $name <$email>" . "\r\n";
$headers .= "Reply-To: $email" . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
if (mail($to, $subject, $message, $headers)) {
header("Location:$parent");
}
?>
我昨天整天尝试了几个代码变体,但似乎无法让它工作。感谢所有建议,希望今天能学到一些东西。
答案 0 :(得分:0)
首先将空字段添加到表单中。
<form id="contact" name="contact" method="post" action="send.php">
<input type="text" name="phone_number" id="phone_number">
添加到CSS文件中以将其与实际人员隐藏起来:
#phone_number { display: none; }
检查字段是否有检测垃圾邮件的内容:
if ($_POST['phone_number']) {
echo "Thank you for your lovely spam.";
exit();
}
答案 1 :(得分:0)
当垃圾邮件机器人第一次读取您的网站时,它会实际扫描并存储您的字段名称和表单的action="send.php"
属性,然后在一定时间间隔内直接将数据转发给您的{ {1}}文件,因此它完全忽略了表单的新内容。
因此,为了立即解脱,您实际上想要这样做:
html页面
send.php
<强> send.php 强>
<input type="hidden" name="HIDDEN_TRAP" value="" />
<!-- ^ Add this line inside of your <form> -->
答案 2 :(得分:-1)
此页面包含许多垃圾邮件发送者帐户:http://www.stopforumspam.com/您可以将该文件下载为CSV文件并使用php阻止它们。
最简单的必须是设定一个标准。以下是使用PHP创建验证码图像的教程:THENEWBOSTON
如果您认为垃圾邮件机器人用一些信息填充所有表单数据。基本上按照你的说法创建一个隐藏字段。
<input type="hidden" name="antibot" value="" />
和你的PHP代码:
if ( $_POST['antibot'] !== "" ) {
throw new Exception ("Bot detected.");
}else {
//--- THE REST OF YOUR CODE
}