【问题标题】:Honeypot PHP for Comment Form蜜罐 PHP 评论表单
【发布时间】:2012-02-25 20:21:12
【问题描述】:

我正在创建一个 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 所说,您将希望在您的 css 中将“robotest”的 id 设置为 display:none):

<?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";
}   
?>

【问题讨论】:

  • 跟踪你的逻辑...var_dump每个条件分别跟踪你的代码并找到问题
  • 问题出在蜜罐($robotest)上。添加 && ($robotest = "") 会导致脚本返回的电子邮件不正确。谢谢

标签: php forms validation comments honeypot


【解决方案1】:

filter_var() 在电子邮件有效时返回非假值,而不是 false。在if() 中删除filter_var( 之前的!

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest = "")) 

filter_var() 失败时,你正在if() 中执行代码,这就是你得到的原因

电子邮件不正确

对于有效的电子邮件。


我也错过了一个事实,即您分配给 $robotest,而不是将其与空字符串进行比较。您需要使用双等号比较运算符而不是单等号赋值运算符。你的if() 应该是这样的:

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) 

【讨论】:

  • 非常感谢。猜猜我没有完全理解 filter_var()。删除了!来自 if 语句,但由于某种原因,它仍然返回“电子邮件不正确”。还有什么我可能会遗漏的吗?
  • 谢谢@JamWaffles。我将运算符更改为双重相等,但由于某种原因它仍然不起作用。我编辑了上面的 php,使它是最新的。
  • filter_var() 之前还有!。你有没有在你的实际代码中把它拿出来?因为它仍然存在于您编辑的帖子中。
  • 它使用 ! 正确验证。如果没有!,它会错误地验证。我不明白为什么?
  • if(!filter_var()) 表示“如果filter_var() 返回一个非真(即假)值,则执行if() 中的任何内容”。 ! 反转了 filter_var() 的布尔值,因此当它返回 false 时,if() 将其视为返回 true,因此 if 可以执行。
【解决方案2】:

对于替代答案,我在我的 html 中设置了一个“蜜罐”输入,显示:无

<input type="text" name="honeypot" id="honeypot" style="display:none;"/>

【讨论】:

  • 感谢您的意见。我的蜜罐的 css 也设置为 display:none。
猜你喜欢
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2013-10-12
  • 1970-01-01
相关资源
最近更新 更多