所以,我的网站收到了大量的垃圾邮件。
为了过滤掉其中的一些,我想测试帖子的正文,确保它不包含某些词语。如果包含,就给用户一个即时(临时)禁止访问的标记。
附上我的代码。我添加了一个echo行来显示返回的位置,并使用包含或不包含测试词语的帖子进行测试。出于某种原因,它总是返回null,什么也没有显示。我不能将$_POST变量传递到这个函数中吗?
代码:
为了过滤掉其中的一些,我想测试帖子的正文,确保它不包含某些词语。如果包含,就给用户一个即时(临时)禁止访问的标记。
附上我的代码。我添加了一个echo行来显示返回的位置,并使用包含或不包含测试词语的帖子进行测试。出于某种原因,它总是返回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语句会继续执行,这可能是我之后看到空值的原因?
$_POST['body']
不为空,并注意字母大小写。 - Kevin$_POST['body']
上,而不是strpos
,因为strpos
只会执行它所接收到的内容。如果strpos
工作失效了,那么我建议先确保$_POST['body']
不为空。 - Kevin$POST['body']
的内容以及PHP生成的HTML/文本。此外,打印假值将被写成空字符串。 - Master DJonecho
不会输出 "null"。使用var_dump($pos)
查看您实际获取的内容。可能是false
,这可能意味着一切正常运行;但是如上所述,您的if
似乎是反向的。 - deceze