Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Бан пользователя через SQL запрос, как правильно?

Бан пользователя через SQL запрос, как правильно?


     08.11.2023    бан пользователя, sql запрос    Общие вопросы, MySQL    426

вопрос
Здравствуйте.

Задача, которую требовалось решить, я уже решил так сказать в "полуавтоматическом" режиме, но все же хотелось для общего понимания узнать, возможно ли забанить пользователя через SQL запрос, если точнее, как правильно банить?

Когда в БД в "banned" указываешь "yes", юзера на сайте показывает как "заблокированного", даже в админке число меняется, но вот в таблице dle_banned в БД его нет, соответственно невозможно для него указать "descr" (причина блокировки). Я правильно понимаю, что при бане через админку, DLE пользователя из dle_users переводит в dle_banned?

Вот пример SQL запроса:
UPDATE `dle_users`
SET `banned` = 'yes'
WHERE `email` IN (
    'email@email.ru',
    'email@email.ru',
    'email@email.ru'
);

Получается, нужен еще дополнительный запрос, который после banned=yes, еще и будет переносить юзера в dle_banned?

Ответа пока нет


5 комментариев

dj-avtosh
PHP-developer

dj-avtosh - 8 ноября 2023 15:24 -

Примерно так на 7 дней, но не тестил:

INSERT INTO `dle_banned` (`users_id`, `descr`, `date`, `days`) 
SELECT user_id, 'причина' as `descr`, NOW() as `date`, '7' as `days`
FROM dle_users
WHERE `email` IN (
    'email@email.ru',
    'email@email.ru',
    'email@email.ru'
);


По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

compik
Юзер

compik - 8 ноября 2023 16:35 -

dj-avtosh, спасибо, на примере вашего кода немного переделал, вроде работает так.
Просто без SET `banned` = 'yes' не банит юзера.

UPDATE dle_users
SET `banned` = 'yes'
WHERE `email` IN (
    'email@email.ru',
    'email@email.ru'
);

INSERT INTO `dle_banned` (`users_id`, `descr`, `date`, `days`)
SELECT user_id, 'test' as `descr`, NOW() as `date`, '0' as `days`
FROM dle_users
WHERE `email` IN (
    'email@email.ru',
    'email@email.ru'
);

dj-avtosh
PHP-developer

dj-avtosh - 8 ноября 2023 17:41 -

Ну я Вам написал только доп запрос.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

TeraMoune
Эксперт

TeraMoune - 8 ноября 2023 21:52 -

Данные в таблице _users служат только для информации выводимой в профиле пользователя, и только для тега группа пользователя который в случае если пользователь забанен будет изменён на слово (забанен). Данные в таблице не являются данными для блокировки.

А сам бан пользователя осуществляется через таблицу _banned, но и данные действия не очень и эффективны. Так как таблица кэшируется и данные блокировок берутся из кэша. После запроса требуется чистить кэш иначе забаненные не сразу окажутся в бане. А только когда обновится кэш, а это делается раз в сутки.

UPD:
Хотя тут есть нюансы, короче данные взаимосвязаны, но зависит от типа бана. Но всё же чтобы не напороться на что-то и быть уверенным, стоит удалять файл кэша (опять же система это делает сама но в определённых случаях). А при добавлении новых записей в блок это действие всегда делается.

Тестовый репозиторий установки плагинов: teramoune

compik
Юзер

compik - 9 ноября 2023 09:52 -

TeraMoune, все верно, сам заметил, что пока в админке не очистить кэш, число заблокированных не меняется.

Исходя из информации что вы написали, получается при бане пользователя, DLE просто "копирует" некоторую информацию о пользователе из dle_users в dle_banned, а при снятии с бана, удаляет информацию из таблицы. Ну и да, не забудем про banned` = 'yes', чтобы в профиле вывести информацию что "забанен".

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх