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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Онлайн в чате
 
 автор: Rembrant   (05.05.2007 в 12:17)   письмо автору
 
 

Вот такая ситуация:
Юзер заходит в чат. Его ник заносится в базу данных присутствующих. Разворачиваются три фрейма. 1) Фрейм для сообщений (2) Фрейм со строкой (3) Фрейм присутствующих. Ник данного юзера появляется во фрейме присутствующих и ему выводятся в этот врейм все ники из базы.
Как сделать так, чтобы юзеры, которые в чате уже присутствуют тоже увидели ник пользователя зашедшего после них. Думаю как то надо постоянно через определенный промежуток времени обращаться к базе и обновлять фрейм. И еще не могу понять, как узнать что пользователь покинул чат?

   
 
 автор: bronenos   (05.05.2007 в 13:03)   письмо автору
 
   для: Rembrant   (05.05.2007 в 12:17)
 

ставьте время когда он зашел и удаляете слишком старые записи и когда нажимает на кнопку выход

   
 
 автор: Rembrant   (05.05.2007 в 13:16)   письмо автору
 
   для: bronenos   (05.05.2007 в 13:03)
 

я пытаюсь сделать постоянный refresh фрейма следующим образом:

<META HTTP-EQUIV='Refresh' CONTENT='4; URL=online.php'>

Эту строку вставляю в код самого фрейма.

Для проверки online.php имеет следующий код:

<?php
echo 'обновление';
?>

Странно, но не работает (

   
 
 автор: bronenos   (05.05.2007 в 13:28)   письмо автору
 
   для: Rembrant   (05.05.2007 в 13:16)
 

я больше люблю пользоваться
<body onLoad="setTimeout('window.location.reload();', 4000);">

+ если бы обновляете то должны вновь писать мета тег

   
 
 автор: Rembrant   (05.05.2007 в 15:31)   письмо автору
 
   для: bronenos   (05.05.2007 в 13:28)
 

Чтото я не очень понял. Мне нужно чтобы каждые четыре секунды вызывался файл online.php
а не обновление страницы. И уже непосредственно в этом файле буду генерировать новый код этого фрейма.

   
 
 автор: bronenos   (05.05.2007 в 15:49)   письмо автору
 
   для: Rembrant   (05.05.2007 в 15:31)
 

Ajax?

   
 
 автор: Rembrant   (05.05.2007 в 16:00)   письмо автору
 
   для: bronenos   (05.05.2007 в 15:49)
 

Нет ajax я покачто не планирую использовать, потому что многое мне в нем не понятно. Сначала хочу создать чат полностью средствами mysql и php.

   
 
 автор: bronenos   (05.05.2007 в 16:21)   письмо автору
 
   для: Rembrant   (05.05.2007 в 16:00)
 

тогда без перезагрузки не обойдетесь

   
 
 автор: Rembrant   (05.05.2007 в 16:30)   письмо автору
 
   для: bronenos   (05.05.2007 в 16:21)
 

Дык перезагрузка и нужна!!!
Сейчас попробую подробней описать ситуацию )))
Есть хтмл форма. Вводится ник. Нажимается submit. Далее обработчик inchat.php заносит этот ник в заранее созданную базу данных. Страница делится на три фрейма. Во фрейм с пользователями выводится массив ников из данной базы данных.
Вот код этого фрейма:


<html> 
<head> 
<META CONTENT="4; URL=online.php" HTTP-EQUIV=Refresh>
<script language='JavaScript'> 
function savearr (arr) {   
mas = arr;  
for (i=0;i<mas.length; i++) 

var tr_nick=document.createElement('tr'); 
document.getElementById('tab_nick').appendChild(tr_nick); 
var td_nick=document.createElement('td'); 
tr_nick.appendChild(td_nick); 
td_nick.innerHTML=mas[i]; 
}
}
</script> 
</head> 
<body> 
<script>
var mas = new array();
</script>
<div id=nick_div >
<table id=tab_nick>
<tbody>
</tbody>
</table>
</div>
</body> 
</html>


В online.php будет новый запрос к базе и её содержимое будет заново выводится в этот фрейм.
Млин я ваще уже сам запутался(((( bronenos! Как вообще лучше это всё организовать?

   
 
 автор: bronenos   (05.05.2007 в 16:58)   письмо автору
 
   для: Rembrant   (05.05.2007 в 16:30)
 

2 вопроса.
1. кроме ников еще что нибудь есть? (статус, ссылка...)
2. за получение списка отвечает только указанная функция?

   
 
 автор: Rembrant   (05.05.2007 в 16:58)   письмо автору
 
   для: Rembrant   (05.05.2007 в 16:30)
 

Всё понял ))) Чета я потупил немного ))) подскажите теперь как узнать что пользователь покинул страницу ))
P.S. кроме ников в базе больше ничего не наблюдается =)

   
 
 автор: bronenos   (05.05.2007 в 16:59)   письмо автору
 
   для: Rembrant   (05.05.2007 в 16:58)
 

или кнопкой выход или он не проявлял активность Х минут

   
 
 автор: Rembrant   (05.05.2007 в 17:16)   письмо автору
 
   для: bronenos   (05.05.2007 в 16:59)
 

То есть человек уже мог выйти из чата, а т.к. Х минут еще не прошло, то все будут видеть его как будто он есть в чате?

   
 
 автор: bronenos   (05.05.2007 в 17:18)   письмо автору
 
   для: Rembrant   (05.05.2007 в 17:16)
 

именно
поэтому удаляйте старые записи

   
 
 автор: Rembrant   (05.05.2007 в 17:22)   письмо автору
 
   для: bronenos   (05.05.2007 в 17:18)
 

А по какому принцыпу работают например чаты где выход одного юзера видят остальные мгновенно? Например чаты на авгусе или на мпчате.

   
 
 автор: DEM   (05.05.2007 в 17:37)   письмо автору
 
   для: Rembrant   (05.05.2007 в 17:22)
 

Такие чаты работают на АЯКСЕ (скорее всего)...
А что бы юзеры удалялись из БД когда выходят, попробуйте эту функцию:

mysql_query("DELETE FROM online WHERE time < NOW() - INTERVAL '20' MINUTE");


Она удаляет в таблице online все записи в которых поле time меньше, чем нынешнее время выдаваемое NOW() (лучше всего аремя в это поле так и заносить :) )

   
 
 автор: bronenos   (05.05.2007 в 17:45)   письмо автору
 
   для: DEM   (05.05.2007 в 17:37)
 

у меня тоже на аяксе
удаляются все записи у которых последняя активность была Х минут назад и по кнопке Выход...

   
 
 автор: DEM   (05.05.2007 в 17:49)   письмо автору
 
   для: bronenos   (05.05.2007 в 17:45)
 

Ну человек написал что не хочет АЯКС...

   
 
 автор: bronenos   (05.05.2007 в 17:52)   письмо автору
 
   для: DEM   (05.05.2007 в 17:49)
 

не хочет потому что не умеет
а пусть почитает темы на форуме
ему понравится

   
 
 автор: Rembrant   (05.05.2007 в 18:36)   письмо автору
 
   для: bronenos   (05.05.2007 в 17:52)
 

У меня есть книга аякс в действии, только вот хоть убейте не пойму что к чему там. Поэтому решил сначала сделать полностью на php чтоб хоть как то врубиться в принцып работы, а потом по ходу дела буду пробовать обгрейживать код под аякс.

Вот на счет времени неактивности. Например человек вышел с чата и может быть такое что на протяжение двадцати минут он будет висеть в списке онлайн??? О_о

   
 
 автор: bronenos   (05.05.2007 в 19:14)   письмо автору
 
   для: Rembrant   (05.05.2007 в 18:36)
 

да. говорю, у меня 15 например
сложно определить
закрыл он окно или отошел поесть

   
 
 автор: Rembrant   (05.05.2007 в 21:09)   письмо автору
 
   для: bronenos   (05.05.2007 в 19:14)
 

А onUnload не поможет?
Я уверен что както можно на сто процентов и главное мгновенно удолять пользователей из базы без аякса =)))

   
Rambler's Top100
вверх

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