我有一个在线游戏,我想禁止重复犯罪者注册。
我通过在表中存储ip地址做了一个简单的ip-ban,代码看起来像这样:
$ipadr = $_SERVER["REMOTE_ADDR"];
$query="SELECT * FROM banned WHERE ip = '$ipadr'";
// if num results > 0, then the user is not allowed to register
然而,一些用户不断更改他们的IP地址以便回来。 所以我希望能够将ip-ranges添加到数据库中 f.ex 187.15.200。*
现在我该怎样做这样的事情?
我想它可以使用包含反向LIKE的查询,但我不知道如何制定它
example: SELECT * FROM banned WHERE '$ipadr' like ip%
答案 0 :(得分:0)
你需要一个像这样的php函数来获取ip地址的前三个元素的IP地址,这样你就可以这样查询它们。
function GetFirstThree($ip) { // fnkr user wrote this function in another post just to give him credit
if(strlen($ip) <= 10) {
$pos = strpos($ip, '.', strlen($ip)-3);
} else {
$pos = strpos($ip, '.', strlen($ip)-4);
}
$ip = substr($ip, 0, $pos);
$ip = substr($ip, 0, strlen($ip));
return $ip;
}
查看我链接的帖子,看看获取ip地址的前三个元素的适当方法..一旦你拥有它只是一个简单的like
在mysql中使用通配符。
使用通配符执行查询。
SELECT * FROM banned WHERE '$ipadr' like '{$ip}%'