2013-05-13 2 views
0

Я добавляю к моему скрипту регистрации некоторую защиту от спама.Найти записи в массиве во временном интервале

Цель состоит в том, чтобы сценарий отклонил пользователя от создания новой учетной записи, если более 10 учетных записей в базе данных соответствуют их IP-адресу, и эти десять учетных записей были сделаны за последний час.

Это позволит людям в библиотеке, например, создавать свои учетные записи, а также препятствовать людям создавать спам-аккаунты в нашей базе данных.

У меня есть следующий код, но как я могу проверить, было ли создано 10 или более учетных записей за последние 1 час?

if($count_existscheck==1) { 
    echo 'account already exists.'; 
    exit(); 
} 
if($count_existscheck==0) { 
    // begin check for IPs 
    $ip = $_SERVER['REMOTE_ADDR']; 
    $sql_ipcheck = "SELECT * FROM members WHERE ip='$ip'"; 
    $result_ipcheck = mysql_query($sql_ipcheck); 
    $count_ipcheck = mysql_num_rows($result_ipcheck); 

    // if count =10 or >10, check if they were in the last hour 
    if($count_ipcheck>9) { 
     $row_ipcheck = mysql_fetch_assoc($result_ipcheck); 
    } 
} 
+0

Вы хотите проверить IP? Это не очень надежный способ проверки учетных записей об ошибках (или 10 учетных записей в вашем случае) – brbcoding

ответ

1

Попробуйте это:

$onehourbefore = strtotime('-1 hour'); 
$sql_ipcheck = "SELECT * FROM members 
     WHERE ip = '$ip' AND lastregistration > $onehourbefore; 
$result_ipcheck = mysql_query($sql_ipcheck); 

if(mysql_num_rows($result_ipcheck)>=10) echo 'Access Denied'; 

Вы должны иметь столбец в таблице тха членов под названием «lastregistration», где вы храните время регистраций в настоящее время в Отметка времени Unix.

(И вы должны проверить время вашего сервера MySQL и время вашего веб-сервера. И вы должны использовать mysqli_query() не mysql_query() ...)

Смежные вопросы