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 :: Версия для печати :: Автоочистка гостевой книги
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Автоочистка гостевой книги

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

1. n1k86 - 23 Марта, 2011 - 07:12:45 - перейти к сообщению
В общем, хочу без крона реализовать автоочистку гостевой книги от всех сообщений... ручная автоочистка уже не в моде что называется))) Не подскажите как это можно сделать??? Гостевая сделана на PHP + MySQL.
2. movEAX - 23 Марта, 2011 - 07:28:36 - перейти к сообщению
Ну, как как, когда кто-то заходит в гостевую, проверять на наличие устаревших данных и удалять их.
CODE (SQL):
скопировать код в буфер обмена
  1. DELETE FROM tablename WHERE DATEDIFF(NOW(), date_create) > 0
3. n1k86 - 23 Марта, 2011 - 07:31:01 - перейти к сообщению
По подробней можно, пожалуйста???
4. movEAX - 23 Марта, 2011 - 07:34:16 - перейти к сообщению
n1k86 пишет:
По подробней можно, пожалуйста???

А что не понятно?
Перед тем как делать выборку из базы для гостевой книги удаляете ненужные данные запросом приведенным выше, где tablename имя таблицы, а date_create - поле, содержащее дату создания записи в гостевой книге.

Описание функций для работы с датой и временем: http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]e-functions[dot]html
5. n1k86 - 23 Марта, 2011 - 07:36:29 - перейти к сообщению
Спасибо. Время созданной записи в time() да????
(Добавление)
И почему > 0 ????? Объясните, пожалуйста.
6. movEAX - 23 Марта, 2011 - 08:25:05 - перейти к сообщению
DATEDIFF() returns expr1 – expr2 expressed as a value in days from one date to the other
Т.е. результатом работы функции будет разница дат в днях, а следовательно если будет возвращен 0, то сутки еще не прошли.
7. n1k86 - 23 Марта, 2011 - 11:21:50 - перейти к сообщению
Понятно. Завтра тогда посмотрю, код и результат сюда покажу....)
8. n1k86 - 24 Марта, 2011 - 13:45:00 - перейти к сообщению
Такой воспрос появился...а дату в каком формате мне заносить в бд?
9. movEAX - 24 Марта, 2011 - 14:23:04 - перейти к сообщению
datetime
10. n1k86 - 24 Марта, 2011 - 18:40:34 - перейти к сообщению
Ага... ну получилось что-то вот такое...
PHP:
скопировать код в буфер обмена
  1.  
  2. $allposts = mysql_result(mysql_query("SELECT COUNT(*) FROM $table"),0);
  3. if ($allposts == 0)
  4. {
  5. echo "<div class='msg'>В гостевой комнате ещё не было оставлено ни одного сообщения!</div>";
  6. }
  7. else
  8. {
  9. //Проверяем, можно ли автоматически удалить сообщения.
  10. mysql_query ("DELETE FROM $table WHERE DATEDIFF(NOW(), datetime) > 0");
  11.  
  12. //Выводим сообщения на страницу
  13. $result = mysql_query("SELECT * FROM $table ORDER BY puttime DESC LIMIT $start, $num");
  14. while ($row = mysql_fetch_array ($result))
  15. echo "<div class='msg'><div class='infomsg'><b>".$row['name']."</b> (".$row['puttime'].")<br /> <b>IP:</b> ".$row['ip']."<br /></div>".$row['msg']."<br /></div><div class='engine'>[<a href=index.php?delete=".$row['id'].">Удалить</a>] | [<a href=index.php?edit=".$row['msg'].">Изменить</a>] <br /></div>";
  16. }
  17.  


Сработает???ато сутки ждать жесть... В БД дата записывается в формате 0000-00-00 00:00:00
Можно как нибудь сделать, чтобы сам указывал, через какой промежуток времени очистку делать???
11. movEAX - 24 Марта, 2011 - 20:56:56 - перейти к сообщению
Да пожалуйста,
CODE (SQL):
скопировать код в буфер обмена
  1. DELETE FROM table_name WHERE create_date < CURDATE()

Удаляет все записи предыдущего дня.
12. n1k86 - 24 Марта, 2011 - 21:05:12 - перейти к сообщению
вставил твой код, удалились все сообщения предыдущего дня...)))) Но! Всеже, то что я чуть выше написал - всё правильно??? Должно работать???
(Добавление)
У тебя есть ICQ??? Можешь кинуть в личку. Так проще крапаль будет...если тебе удобно.

 

Powered by ExBB FM 1.0 RC1