Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Ньюансы системы отображения новых сообщений (last visit)

Сообщения:  [1-10]   [11-14] 

 
 автор: Sergey89   (24.02.2006 в 19:22)   письмо автору
 
   для: FaStY   (24.02.2006 в 19:12)
 

Я не нашёл другого способа, кроме как записывать посещённые страницы в БД =)

   
 
 автор: FaStY   (24.02.2006 в 19:12)   письмо автору
 
   для: cheops   (23.02.2006 в 00:06)
 

все, все получилось, спасибо.
Вот теперь возниклаеще одна проблемка. как сделать, чтобы когда я просмотрел тему, она переставала быть новой.Я делал, чтобы те сообщения, которые были написаны с последнего входа показывались как новые, как теперь мне сделать, чтобы после прочтения, они становились старыми :)

   
 
 автор: cheops   (23.02.2006 в 00:06)   письмо автору
 
   для: FaStY   (22.02.2006 в 21:52)
 

Обратно можно переводить при помощи функци FROM_UNIXTIME(), только вам это не требуется... странно что функция не обновляет... проверьте дескрипторы $a и $b - может ошибка где происходит
<?php
  
if(!$a) exit(mysql_error());
?>

   
 
 автор: FaStY   (22.02.2006 в 21:52)   письмо автору
 
   для: cheops   (22.02.2006 в 20:17)
 

проблема в том, что все поля с батой, у меня в формате datetime. И при выводе, у меня всегда пишет:

30.11.1999 в 00:00

и почему-то не обновляет :(
я вот так сделал:

<?php
 $query_lasttimeuser 
"SELECT  UNIX_TIMESTAMP(lastime) FROM users WHERE login = '$current_author'" ;
  
$result_lasttimeuser mysql_query ($query_lasttimeuser)
    or die (
"ошибка aпри выборе пользователей");
 
$lastime =  mysql_fetch_array$result_lasttimeuser );
$lasttime $lastime[0];
 
// Прошло больше 20 минут 
  
if(time() - $lasttime 60*20
  { 
    
// Пользователя не было на форуме некоторое время - 
    // в ltime записываем значение из lasttime 
   
$a mysql_query("UPDATE users SET ltime = lasttime WHERE login = '$current_author'"); 
  } 
   
// В любом случае обновляем поле lasttime 
  
$b mysql_query("UPDATE users SET lasttime = NOW()  WHERE login = '$current_author'"); 
?>

$current_author - это куки автора.
Просто я не знаю как переводить Unixtime обратно в datetime, хотя может и не в этом проблема

   
 
 автор: cheops   (22.02.2006 в 20:17)   письмо автору
 
   для: FaStY   (22.02.2006 в 19:14)
 

1) Смотрим прошло ли 20 минут со момента последнего визита
SELECT UNIX_TIMESTAMP(lasttime) AS lasttime FROM users WHERE ...

Запрос возвращает время последнего обращения в виде числа секунд прошедших с 1 января 1970 года. Пусть это время помещается в переменную $lasttime.
<?php
  
// Прошло больше 20 минут
  
if(time() - $lasttime 60*20)
  {
    
// Пользователя не было на форуме некоторое время -
    // в ltime записываем значение из lasttime
    
mysql_query("UPDATE users SET ltime = lasttime WHERE ...");
  }
   
// В любом случае обновляем поле lasttime
   
mysql_query("UPDATE users SET lasttime = NOW() WHERE ...");
?>

2) Извлекаем значение поля ltime из таблицы users
SELECT ltime FROM users WHERE ...

Всё ничего больше делать не нужно - это значение используем в других запросах для отображения новых сообщений
SELECT * FROM msg WHERE puttime > 'ltime'

   
 
 автор: FaStY   (22.02.2006 в 19:14)   письмо автору
 
   для: cheops   (21.11.2005 в 13:10)
 

значит у меня есть таблица users в ней поля: id, login, lasttime(это при каждом обращенииам форума), ltime(сюда должны перебрасываться дата, если пользователь отсутсвовал 20 мин), покажите пожалуйста на этом примере, как осуществить проверку новых сообщений?

   
 
 автор: Sulla   (15.02.2006 в 02:30)   письмо автору
 
   для: FaStY   (15.02.2006 в 00:42)
 

1) например:
в базе есть таблица текущих сессий. (user_name, last_uptime, host, ip )
есть index.php -(основная страница форума куда польхователь точно зайдёт )
в котором вызывается функция online();
а) основаная задача данной функции проверить существует ли запись в таблице сессий с запись с username == имени (логину) пользователя, если нету то добавить. (пользователь вощол)
а если есть запись то обновить время last_update

б) проверить если вышел таймаю для других сессий то удалить их.

2) читать внимательно 1)

   
 
 автор: FaStY   (15.02.2006 в 00:42)   письмо автору
 
   для: Sulla   (14.02.2006 в 23:48)
 

1) подскажите как сделать, чтобы в базу добавлялось когда пользователь последний раз зашёл на форум.(это делать скрипт добавления в базу в каждой странице?(ведь мало ли с какой страницы он зайдет))
2)как после того, как он придет и все сообщения со времени last_login будут новыми, нам поставить в эти поля текущее время(опять на каждой страниуе делать проверку и вводить NOW()?)

   
 
 автор: Sulla   (14.02.2006 в 23:48)   письмо автору
 
   для: FaStY   (14.02.2006 в 22:47)
 

собсвенно поидее работает так:
в таблице есть пункт last_login (когда пользователь последний раз защёл на форум )и last_uptime (вреям последней проверки жиф ли он)

если он приходит в первый раз то отмечаем "новыми" (для него) все сообщения
со времени last_login. после того ставим

last_login - текущее время ,
last_uptime - текущее время

соответсвенно при каждой новой загрузке страницы с топиками last_uptime обновляем
(тут запуск порверки на выход с форума потайм ауту ),
а last_login не трогаем.


пользователь зависает на интересном топике 20 или более минут , обновляет потом переходит в другой топик :
функция проверки выхода по тайм ауту получает что last_uptime < (текущег оврермени минус 20 минут) ,всё пользователь сичтается заново пришедшим
ему отмечаются сообщения новыми те которые появились после last_login
после этого last_login = теукщему времени ... ивсё по новой )


надеюсь понятно --=)

   
 
 автор: FaStY   (14.02.2006 в 22:47)   письмо автору
 
   для: cheops   (21.11.2005 в 13:10)
 

1)хм... хоть убейте не понял :( можно еще как-нить объяснить и желательно на примерах.
2) вот в Таблице last_time На вашем форуме есть такие поля: now1 | last_time1| now2 | last_time2 и т.д. Можно обяснить для чего они и как с ими пользоваться?

   

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования