1

ユーザーの国を取得するために Maxmind geoip データベースを使用します。すべてのログイン試行を mysql に保存し、多くの場合、人々は異なる IP でログインします。IP が同じ国のものであれば問題ありませんが、パスワードがボード上で共有されている場合、あらゆる国がそれを使用していることがわかります。

私は今、国とIPを取得するためにこれを使用しています:

$ipaddress = (long2ip($row['ip']));
$country_name = geoip_country_name_by_addr($gi, "$ipaddress");
$country_iso =  geoip_country_code_by_addr($gi, "$ipaddress");

次に、個別の IP アドレスの数を数えます。

$count_ip = "SELECT distinct ip FROM members WHERE username='".$row['username']."'";
$result_ip = mysql_query($count_ip);
$ips = mysql_num_rows($result_ip);

それが 1 以上の場合、メッセージが表示されます。

しかし、ユーザー名で使用されているすべての IP アドレスの国コードを比較して、ユーザー名がさまざまな国で使用されているかどうかを確認してからメッセージを送信したいと考えています。

どうすればいいですか?私はIPの配列を持っています。最初にIPの国コードをチェックしてから、それが異なるかどうかを確認する必要があります。

4

1 に答える 1

1

クエリはすでにすべての IP アドレスを返しているため、結果の行を確認する必要があります。

$countries = array();
while ($row = mysql_fetch_array($result_ip, MYSQL_NUM)) {
    $ipaddress = (long2ip($row[0]));
    $countries[geoip_country_name_by_addr($gi, "$ipaddress")] = true;
}

if (count($countries) > 1) {
    // more than one countries have been used to sign in
}

ところで、クエリに日付範囲を追加すると仮定しています。そうしないと、旅行者に悪影響を及ぼします;-)

于 2012-06-09T07:37:28.947 に答える