@miisha
Люблю поесть.

Как реализовать временный бан?

Сделал простинький чат (js+php+mysql). Не понимаю как реализовать временный бан на SQL. Может сделать столбик BAN с таймером, но тогда как сделать таймер в sql?
  • Вопрос задан
  • 420 просмотров
Решения вопроса 1
@Mr_Romanov
FullStack WebDev
Делаешь в столбце таймстамп при создании автозаполнением, делаешь update столбца с true/false бана.
Дальше когда забаненный заходит на сайт посылаешь бек смотреть на поле автозаполненое с временем и сравниваешь с временем на сервере в данный момент.

$now = new DateTime(); // текущее время на сервере
$date = DateTime::createFromFormat("Y-m-d H:i", '2014-09-12 23:59'); // задаем дату в любом формате
$interval = $now->diff($date); // получаем разницу в виде объекта DateInterval
echo $interval->y, "\n"; // кол-во лет
echo $interval->d, "\n"; // кол-во дней
echo $interval->h, "\n"; // кол-во часов
echo $interval->i, "\n"; // кол-во минут
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@GreatRash
  1. Отправляя юзера в бан записываем в таблицу его ID, и время разбана (текущее время + время бана)
  2. При каждом заходе на сайт (чат) юзер спрашивает у сервера: "Слыш, сервер, а я случайно не в бане?"
  3. Сервер смотрит ID юзера и сверяет его с табличными данными
  4. Если такой ID есть в таблице банов, то сервер смотрит сколько сейчас времени и сверяет его со временем разбана
  5. Если текущее время меньше времени разбана, то сервер отвечает юзеру: "Да, ты в бане!"


Время естественно в секундах с начала эпохи Unix.
Ответ написан
Комментировать
serginhold
@serginhold
время разбана в колонке хранишь и все

select
  if(`ban_time` > NOW(), 1, 0) as `banned`
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы