【发布时间】:2016-05-16 02:49:27
【问题描述】:
所以,我的网站收到了大量垃圾邮件。
为了过滤掉其中的一些内容,我想测试帖子的正文以确保它不包含某些单词。如果他们这样做,请立即(临时)禁止用户。
包括我的代码。我添加了一条回声线来显示返回的位置,并使用包含或不包含测试词的帖子进行测试。无论出于何种原因,它总是返回 null,并且不显示任何内容。我不允许将 $_POST 变量传递给这个函数吗?
代码:
$bannedwords = array ("spam word", "foo", "bar", "foobar", "quarry");
foreach ($bannedwords as $bannedphrase) {
$pos = strpos($_POST['body'], $bannedphrase);
echo 'The position is: ' . $pos;
if ($pos === FALSE){
//require_once 'inc/mod/ban.php';
//Bans::new_ban($_SERVER['REMOTE_ADDR'], 'Suspected Spammer.', '2', $_POST['board'] == '*' ? false : $_POST['board']);
error($config['error']['bannedword']);
}
}
编辑:我确实在这里看到了一个逻辑错误,但我不认为它破坏了代码。然而,也许是这样。如果用户提前被禁止进入数组,if 语句会继续,这可能是我稍后看到空值的原因?
【问题讨论】:
-
这不是倒过来的吗?如果它的
false意味着它没有找到任何东西,只需确保$_POST['body']不为空,并注意那些字母大小写 -
@statosdotcom 三个等于有什么问题?
-
@RodrigoDuterte,阅读示例.. $pos 值不应该为 null,即使在 if() 块发挥作用之前也是如此。
-
@DanSmith 然后是
$_POST['body']的问题,而不是strpos,它只处理正在喂的东西,因为当strpos坏了时,这就是为什么我说确保$_POST['body']身体不是空的 -
“空”?
echo不会输出“null”。使用var_dump($pos)看看你真正得到了什么。可能是false,这可能意味着一切正常;但是如上所述,您的if似乎倒退了。