Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: mysql DELETE
Форумы портала PHP.SU » » Вопросы новичков » mysql DELETE

Страниц (1): [1]
 

1. etoYA - 23 Января, 2012 - 04:41:37 - перейти к сообщению
Таким образом я удаляю разбаниваю пользователя, а как узнать, какого пользователя я разбаил?
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("DELETE FROM `banned` WHERE `unban_date` <= '$now'");
2. Okula - 23 Января, 2012 - 07:03:59 - перейти к сообщению
До того как удалишь из базы записи получи их через SELECT и будешь знать кого удаляешь Улыбка Улыбка
3. x_nick_x - 23 Января, 2012 - 09:38:01 - перейти к сообщению
По суть $now это и есть тот кого разбаниваешь.
4. Zuldek - 23 Января, 2012 - 09:56:06 - перейти к сообщению
x_nick_x пишет:
По суть $now это и есть тот кого разбаниваешь.
]

Нет. Названия полей говорят за себя. Это дата, а сам запрос используется для "разбана" всех забаненых раньше даты переданной в переменной $now.
5. x_nick_x - 23 Января, 2012 - 10:52:51 - перейти к сообщению
Ясно.
6. etoYA - 23 Января, 2012 - 20:58:12 - перейти к сообщению
Zuldek, да это так и есть.
Okula, и как это сделать?)

Вот так я баню
PHP:
скопировать код в буфер обмена
  1. // Определение времени бана
  2. if ($type == 'Permament') $ban = '2147461200';
  3. else $ban = strtotime(date('d.m.Y', strtotime('+'.$time.'day')));


Вот так разбаниваю
PHP:
скопировать код в буфер обмена
  1.  
  2. // Разблокировка пользователя
  3. function unban() {
  4.         $now = strtotime(date('d.m.Y'));
  5.         $result = mysql_query("DELETE FROM `banned` WHERE `unban_date` <= '$now'");
  6.         if (mysql_affected_rows() > 0) {
  7.                 logs('Разблокировано '.mysql_affected_rows().' пользователя');
  8.                 return true;
  9.         }
  10.         else return false;
  11. }
  12.  
7. Okula - 23 Января, 2012 - 21:05:17 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `banned` WHERE `unban_date` <= '$now'
8. etoYA - 23 Января, 2012 - 21:07:44 - перейти к сообщению
Okula, хм.. Точно.
9. armancho7777777 - 23 Января, 2012 - 21:22:22 - перейти к сообщению
У Вас сама реализация бана не верна просто.
Не надо ничего удалять.
Есть, к примеру, поле `ban` в таблице `banned`.
По умолчниию значение == 0.
Каждый раз при неверной авторизации(или что у Вас там) значение увеличиваем не 1.
Как только значение == 5 (на пример) блокируем.
И уже в дальнейшем делаем не удаление, а обнуление.
PHP:
скопировать код в буфер обмена
  1.  
  2. $result = mysql_query("UPDATE `banned` SET `ban`= 0  WHERE `unban_date` <= '$now'");
  3.  
10. Okula - 23 Января, 2012 - 21:37:01 - перейти к сообщению
Так он банит на время, а не при неверном входе. Как бан на форумах за нарушение правил.
11. armancho7777777 - 24 Января, 2012 - 08:52:03 - перейти к сообщению
Okula пишет:
Так он банит на время, а не при неверном входе. Как бан на форумах за нарушение правил.

А что, большая разница?)
Зато хоть статистика будет: кто и сколько раз был забанен.
12. snikers987 - 24 Января, 2012 - 09:02:56 - перейти к сообщению
Я бы сделал так:
Добавил в таблицу юзвери два поля:
1. banned значение по умолчанию 0
2. ban_expires
И при бане ставил в первое поле значение к примеру 1, а во второе писал метку времени strtotime('+ 1 day', time());

а потом запрос на разбан
PHP:
скопировать код в буфер обмена
  1.  
  2. $mysqli->query('UPDATE `users` SET `banned` = 0 WHERE `banned` = 1 AND `ban_expires` <= '.time());
  3.  


Так можно и уровень бана установить, к примеру значение поля banned = 2 - забанен перманентно

 

Powered by ExBB FM 1.0 RC1