|
|
|
| Вот такая ситуация:
Юзер заходит в чат. Его ник заносится в базу данных присутствующих. Разворачиваются три фрейма. 1) Фрейм для сообщений (2) Фрейм со строкой (3) Фрейм присутствующих. Ник данного юзера появляется во фрейме присутствующих и ему выводятся в этот врейм все ники из базы.
Как сделать так, чтобы юзеры, которые в чате уже присутствуют тоже увидели ник пользователя зашедшего после них. Думаю как то надо постоянно через определенный промежуток времени обращаться к базе и обновлять фрейм. И еще не могу понять, как узнать что пользователь покинул чат? | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 12:17)
| | ставьте время когда он зашел и удаляете слишком старые записи и когда нажимает на кнопку выход | |
|
|
|
|
|
|
|
для: bronenos
(05.05.2007 в 13:03)
| | я пытаюсь сделать постоянный refresh фрейма следующим образом:
<META HTTP-EQUIV='Refresh' CONTENT='4; URL=online.php'>
|
Эту строку вставляю в код самого фрейма.
Для проверки online.php имеет следующий код:
<?php
echo 'обновление';
?>
|
Странно, но не работает ( | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 13:16)
| | я больше люблю пользоваться
<body onLoad="setTimeout('window.location.reload();', 4000);">
|
+ если бы обновляете то должны вновь писать мета тег | |
|
|
|
|
|
|
|
для: bronenos
(05.05.2007 в 13:28)
| | Чтото я не очень понял. Мне нужно чтобы каждые четыре секунды вызывался файл online.php
а не обновление страницы. И уже непосредственно в этом файле буду генерировать новый код этого фрейма. | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 15:31)
| | Ajax? | |
|
|
|
|
|
|
|
для: bronenos
(05.05.2007 в 15:49)
| | Нет ajax я покачто не планирую использовать, потому что многое мне в нем не понятно. Сначала хочу создать чат полностью средствами mysql и php. | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 16:00)
| | тогда без перезагрузки не обойдетесь | |
|
|
|
|
|
|
|
для: 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! Как вообще лучше это всё организовать? | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 16:30)
| | 2 вопроса.
1. кроме ников еще что нибудь есть? (статус, ссылка...)
2. за получение списка отвечает только указанная функция? | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 16:30)
| | Всё понял ))) Чета я потупил немного ))) подскажите теперь как узнать что пользователь покинул страницу ))
P.S. кроме ников в базе больше ничего не наблюдается =) | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 16:58)
| | или кнопкой выход или он не проявлял активность Х минут | |
|
|
|
|
|
|
|
для: bronenos
(05.05.2007 в 16:59)
| | То есть человек уже мог выйти из чата, а т.к. Х минут еще не прошло, то все будут видеть его как будто он есть в чате? | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 17:16)
| | именно
поэтому удаляйте старые записи | |
|
|
|
|
|
|
|
для: bronenos
(05.05.2007 в 17:18)
| | А по какому принцыпу работают например чаты где выход одного юзера видят остальные мгновенно? Например чаты на авгусе или на мпчате. | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 17:22)
| | Такие чаты работают на АЯКСЕ (скорее всего)...
А что бы юзеры удалялись из БД когда выходят, попробуйте эту функцию:
mysql_query("DELETE FROM online WHERE time < NOW() - INTERVAL '20' MINUTE");
Она удаляет в таблице online все записи в которых поле time меньше, чем нынешнее время выдаваемое NOW() (лучше всего аремя в это поле так и заносить :) ) | |
|
|
|
|
|
|
|
для: DEM
(05.05.2007 в 17:37)
| | у меня тоже на аяксе
удаляются все записи у которых последняя активность была Х минут назад и по кнопке Выход... | |
|
|
|
|
|
|
|
для: bronenos
(05.05.2007 в 17:45)
| | Ну человек написал что не хочет АЯКС... | |
|
|
|
|
|
|
|
для: DEM
(05.05.2007 в 17:49)
| | не хочет потому что не умеет
а пусть почитает темы на форуме
ему понравится | |
|
|
|
|
|
|
|
для: bronenos
(05.05.2007 в 17:52)
| | У меня есть книга аякс в действии, только вот хоть убейте не пойму что к чему там. Поэтому решил сначала сделать полностью на php чтоб хоть как то врубиться в принцып работы, а потом по ходу дела буду пробовать обгрейживать код под аякс.
Вот на счет времени неактивности. Например человек вышел с чата и может быть такое что на протяжение двадцати минут он будет висеть в списке онлайн??? О_о | |
|
|
|
|
|
|
|
для: Rembrant
(05.05.2007 в 18:36)
| | да. говорю, у меня 15 например
сложно определить
закрыл он окно или отошел поесть | |
|
|
|
|
|
|
|
для: bronenos
(05.05.2007 в 19:14)
| | А onUnload не поможет?
Я уверен что както можно на сто процентов и главное мгновенно удолять пользователей из базы без аякса =))) | |
|
|
|