Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Изменение БД при выходе?


Автор: Reptor 13.2.2005, 11:04
Например есть поле в БД которое при входе устанавливаеться "1".
А как сделать так что когда мы закрываем окно (страницку) тоесть при выходе БД менялась - тоесть это поле устанавливалось в "0"

Автор: Mal Hack 13.2.2005, 13:07
Никак...
А что ты сделать пытаешься?

Автор: Reptor 13.2.2005, 13:16
Мне надо если человек зашёл на страничку то поле в БД установилось в 1 (естественно только 1 строка которая ему соответствует). И когда он выходит мне надо в БД отметить что его уже нету тоесть это 1 заменить на 0

Автор: Mal Hack 13.2.2005, 13:21
С помощью PHP нельзя определить, когда человек вышел со страницы.
Если ты хочешь сделать систему On-Line пользователей или авторизацию, то делается это другими способами.
Тут на форуме это уже наверняка обсуждалось.

Автор: Reptor 13.2.2005, 13:34
А что на <BODY> какогото unloadнет или чего небудь в этом роде?

Автор: Mal Hack 13.2.2005, 13:40
Не путай. Есть клиентские технологии, а есть серверные.

Автор: Reptor 13.2.2005, 13:47
так можно ж вызывать на unload (если такова есть) функцию которая с помощю XMLHttpRequest дёргала б РНР скрипт который бы лез в БД и делал там что надо а потом брал из БД новый список людей которые сейчас присутствуют?

Автор: Mal Hack 13.2.2005, 13:51
Цитата(Reptor @ 13.2.2005, 13:47)
unload

Это - конец загрузки.

Есть OnExit, но не забывай, что если я просто закрываю браузер или вкладку то оно не сработает.

Автор: Reptor 13.2.2005, 14:05
Цитата
что если я просто закрываю браузер или вкладку то оно не сработает


тоесть если нажать на крестик то нечего не будет?


И ещё я нашол функцию OnUnload

Автор: Mal Hack 13.2.2005, 14:11
Цитата(Reptor @ 13.2.2005, 14:05)
тоесть если нажать на крестик то нечего не будет?

Естественно...
Вариант с открытием Попап окна я тебе не предлагаю.

Цитата(Reptor @ 13.2.2005, 14:05)
И ещё я нашол функцию OnUnload

OnLoad - при загрузке
OnUnLoad - окончание загрузки.

Автор: Sardar 13.2.2005, 14:31
Цитата(Mal @ 13.2.2005, 13:11)
OnUnLoad - окончание загрузки.

Нет, при закрытии окна, но не во всех браузерах есть это событие.

Reptor а почему бы не писать время последнего захода юзера, если интервал между текущим и записанным больше таймаута, то юзера более нет. Наиболее простой и часто реализуемый способ.

Автор: Reptor 13.2.2005, 15:31
Что значит таймаут?

Автор: Mal Hack 13.2.2005, 15:43
Цитата(Reptor @ 13.2.2005, 15:31)
Что значит таймаут?

Ты пишешь в базу время, когда последний раз пользователь зашел на страничку.
Затем ты смотришь, чтобы это время было больше чем 15 минут, к примеру. Эти 15 минут и будут тайм-аутом.

Автор: Axxent 13.2.2005, 16:53
Да. Таймаут - это самое разумное решение. Конечно, можно средствами JS при закрытии порождать новое окно, которое обращалось бы к какому-то скрипту, сбрасывающему базу, но смысл?

Автор: Reptor 13.2.2005, 17:20
так сто мне весно надо юудет дёргать БД и сравнивать время. И как в БД внести изменения.
Получаеться за каждым пользователем надо следить каждую секунду или как?

Автор: Alx 13.2.2005, 17:21
я бы сделал попапом...

Автор: penizillin 13.2.2005, 17:34
Цитата(Reptor @ 13.2.2005, 15:20)
Получаеться за каждым пользователем надо следить каждую секунду или как?
нет, только при каждом его обращении к серверу.

Автор: Alx 13.2.2005, 17:38
penizillin
а если обращения не будет?

Автор: Reptor 13.2.2005, 17:43
Цитата
я бы сделал попапом...

А это как?

Автор: penizillin 13.2.2005, 17:58
Цитата(Alx @ 13.2.2005, 15:38)
а если обращения не будет?
значит, не будет. а таблицу можно регулярно подчищать.

Автор: Sardar 13.2.2005, 18:51
Цитата(Alx @ 13.2.2005, 16:38)
а если обращения не будет?

То проходит время таймаута и юзер выкидывается из списка активных юзеров.
Reptor в базе ничего менять не нужно и никаких флагов выставлять не нужно! Просто выбираем всех у кого время прошедшее с последнего визита не больше таймаута.

Цитата(Alx @ 13.2.2005, 16:21)
я бы сделал попапом...

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


Вывод: не извращайтесь, делайте по старинке, как уже много лет поверенно и доказанно что работает smile

Автор: Opik 13.2.2005, 22:13
Mal Hack
есть функция JS, которая что то делает, при закрытии браузера/окна... только говорить не буду, т.к она это не выход smile)

Автор: Mal Hack 13.2.2005, 22:54
Это обрадотка события толи OnClose, толи ONExit.
В любом случае делать надо по тайм-ауту smile

Автор: Reptor 14.2.2005, 16:39
если делать по таймауту тогда вдруг пользователь отлучиться случайно или ещё что (тоесть не будет давать о себе знать) то получиться что его принудительно выкенет а так мне нельзя, а если рано выйдет тогда список пользователей обновиться не сразу а через определённое время.
Тоесть мне 100% надо знать когда он нажал кнопочку выход или крестик (но не релоуд).
Может кто то вспомнит функцию JS с помощью которой можна такое сделать или ещё чего то (РНР)?

Автор: Mal Hack 14.2.2005, 16:56
Цитата(Reptor @ 14.2.2005, 16:39)
если делать по таймауту тогда вдруг пользователь отлучиться случайно или ещё что (тоесть не будет давать о себе знать) то получиться что его принудительно выкенет а так мне нельзя, а если рано выйдет тогда список пользователей обновиться не сразу а через определённое время.

Так все делают.

Цитата(Reptor @ 14.2.2005, 16:39)
знать когда он нажал кнопочку выход

Если ты ее сам сделаешь - то по ее нажатии и узнаешь.

Цитата(Reptor @ 14.2.2005, 16:39)
или крестик

Никак, без открытия нового окна. И то сработает лишь в 30% случаев.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)