用于评论表单的蜜罐 PHP
-
12-11-2019 - |
题
我正在创建一个 jquery ajax 弹出评论表单,但是我在 php 中设置我的“蜜罐”的方式有问题。
蜜罐 ($robotest) 不工作;相反,脚本返回“电子邮件不正确”。谁能指出我的错误?谢谢
html格式为:
<form class="cmxform" id="commentForm" method="POST" action="">
<p>
<label for="cname">Name</label>
<input id="cname" name="name" size="25" class="required" minlength="2" />
</p>
<p>
<label for="cemail">E-Mail</label>
<input id="cemail" name="email" size="25" class="required email" />
</p>
<p>
<label for="curl">URL</label>
<input id="curl" name="url" size="25" class="url" value="" />
</p>
<p>
<label for="ccomment">Your comment</label>
<textarea id="ccomment" name="comment" cols="22" class="required"></textarea>
</p>
<p class="robotic" id="pot">
<label>Please leave this blank:</label>
<input name="robotest" type="text" id="robotest" class="robotest" />
</p>
<p>
<input class="submit" type="submit" value="Submit"/>
</p>
编辑:
感谢@JamWaffles 的支持。下面是蜜罐的正确实现方法。(正如 Kamalo 指出的,你需要将 'robotest' 的 id 设置为 display:none 在你的 css 中):
<?php
$robotest = $_POST['robotest'];
$email = $_POST['email'];
if((!filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) {
print "E-mail is correct";
$to = 'asdfdsafasdfsda@gmail.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com';
mail($to, $subject, $message, $headers);
} else {
print "E-mail is not correct";
}
?>
解决方案
filter_var()
当电子邮件有效时返回非虚假值,而不是 false
. 。去除 !
前 filter_var(
在你的 if()
:
if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest = ""))
您正在执行里面的代码 if()
什么时候 filter_var()
失败, ,这就是为什么你会得到
电子邮件不正确
对于有效的电子邮件。
我也错过了另一件事,那就是你 分配给 $robotest
而不是将其与空字符串进行比较。您需要使用双等于比较运算符而不是单等于赋值运算符。你的 if()
应该看起来像这样:
if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == ""))
其他提示
为替代答案,我在我的HTML中设置了一个“HONEY POT”,显示:NONE
<input type="text" name="honeypot" id="honeypot" style="display:none;"/>
. 不隶属于 StackOverflow