@feaerzel

Ошибка, почему второй раз антифлуд не срабатывает?

Помогите :(
Антифлуд срабатывает всего один раз, а как только время заканчивается - можно писать свободно сколько угодно, я вообще не понимаю что я не так сделал
Вот код
// КОД ОТПРАВКИ 
case 'writes':
// ПРОВЕРКА НА УРОВЕНЬ
if($udata[lvl] <= 4){
echo "<div class=\"block tmar _center\">В чат можно писать с 5 уровня.</div><div class=\"block tmar _center\"><a href=\"chat.php\">« Назад</a></div>";break;}
$msg=$_POST['zin'];
$msg=substr($msg, 0, 512);
$msg=stripslashes(htmlspecialchars($msg));
$msg=str_replace("\r\n","<br />",$msg);
$msg=str_replace("\r","<br />",$msg);
$msg=str_replace("\n","<br />",$msg);
$msg = addslashes($msg);
$msg=preg_replace ("|[\r\n]+|si","",$msg);
$a = mysql_num_rows(mysql_query("SELECT komentaras FROM komentarai WHERE komentaras = '$msg'"));
$b = mysql_fetch_array(mysql_query("SELECT kada FROM komentarai WHERE nick = '$log' ORDER BY kada DESC LIMIT 1"));
$data_kom = strip_tags($b['kada']);
$data = date("y/m/d H:i:s", strtotime("+20 seconds"));
$data_dbr = date("y/m/d H:i:s");
$time = date("H:i");
// ПРОВЕРКА ПЕРЕД ОТПРАВКОЙ
if($data_dbr >= $data_kom && $msg != "")
{
mysql_query("INSERT INTO komentarai SET nick = '$log', komentaras = '$msg', kada = '$data', time = '$time'");
header('location: http://'.$_SERVER['HTTP_HOST'].'/chat.php');  // ЧТОБЫ ПОВТОРНО НЕ ОТПРАВЛЯЛИ
$rand = rand(1000,9999);
}

elseif($data_dbr < $data_kom) // СИСТЕМА АНТИФЛУДА
{
$sec = $data_kom-$data_dbr;
$rand = rand(1000,9999);
echo "<div class=\"block tmar _center\">Защита от Флуда! Подождите $sec секунд</div>";
echo"<div class=\"block tmar _center\"><a href=\"chat.php?r=$rand\">Продолжить</a><div>";
}
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
@AtaZ
кто знает, тот поймет
Конечно код не очевидный, но попробуем прочитать как есть
if($data_dbr >= $data_kom && $msg != "")
Если текущая дата, больше либо равна дате последнего сообщения и сообщение не пустое.

elseif($data_dbr < $data_kom)
Если текущая дата меньше даты последнего комментария

При этом время которое записывается как время сообщения это текущее + 20 секунд. это уже само по себе обсурд потому, что зачем то в базу заводить лишнее поле, если можно просто сравнивать с текущим+20.

Если вы иного мнения, просто сделайте вывод всех значений из условия на экран и увидите где ошибка.
Ошибка или при получении данных из БД, либо вообще не в этом участке кода.

Вообще игра с датами какая-то совсем странная.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы