Я не привык к работе со значениями, которые должны уменьшаться каждый раз, как для пользователя, предупреждающего пользователя, например предупреждение, которое сохраняется в течение 30 days
которое может достигать максимального значения 3 warns
до того, как пользователь получит запрет
Я думал создать такую таблицу пользователей, как сейчас, но теперь я должен работать над ней, я считаю, что это не полезно для уменьшения значений каждые 30 дней:
table_user - username - email - warnings (integer) - last_warn (timestamp data type)
следует ли использовать некоторый php-таймер?
существует ли какой-либо стандарт tecnique для пользовательских предупреждений?
Нормализовать свои таблицы, вырвав предупреждения от пользователя, например:
Table: Users UserID int auto generate PK UserName UserEmail Table: UserWarnings UserID WarningDate
теперь вы можете написать запрос, чтобы определить, есть ли три предупреждения за последние 30 дней. Выполните этот запрос, когда произойдет «предупреждение», и если строка возвращается, запретите пользователя.
Запрос будет выглядеть примерно так:
SELECT COUNT(*) FROM UserWarnings WHERE UserID=...your user id... AND WarningDate>=...current date time... HAVING COUNT(*)>2
Предоставляя таблицу предупреждений, вы можете сохранить полную историю предупреждений, что может быть полезно.
Вы можете создать другую таблицу
User_warnings: user_id warn_timestamp
Всякий раз, когда пользователь предупреждается , вы сначала удаляете все записи старше 30 дней, затем проверяете, есть ли еще два или более предупреждения. Затем запретите пользователю.
Если вы хотите получить информацию обо всех предупреждениях, не удаляйте старые предупреждения, а просто запрашивайте предупреждения за последние 30 дней.
Таким образом, вам не нужно уменьшать каждый день, но просто нужно проверить, появляется ли другое предупреждение.
По-моему, стандартного дизайна для систем предупреждения пользователей действительно нет. «Три удара и вы вышли» – это типичный подход, но не всегда лучший. Например, если у меня есть правила N
на моем веб-сайте, и мы скажем, что K
этих правил являются серьезными преступлениями, то преступления, которые не так серьезны, я бы сказал, давая три удара. Но, может быть, серьезные преступления являются автобанами или дают два удара?
Если бы мне пришлось создать что-то вроде этого, я бы создал таблицу, которая выглядела бы так:
user_warnings: - warning_id - user_id - created_at - offense_level
И тогда, возможно, у вас есть запрос, в котором вы можете найти пользователей, у которых был суммарный уровень нарушения за последние T
дней, которые были больше или равны значению уровня нарушения правил. И если их общий уровень преступности превысил рекомендуемое значение, запретите пользователя. Я бы сказал, что уровень преступности должен быть чем-то вроде 5 и иметь многоуровневые уровни правонарушений.
На мой взгляд, никогда не удалять прошлые преступления. Вы никогда не знаете, когда важно помнить тот материал, который был ранее, и хорошо вести записи об этом. Просто убедитесь, что этот запрос проверяет только даты, которые составляют менее 30 дней (или сколько дней прошло, что предупреждения, которые вы хотите установить, могут быть).