[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не выходит запрос к базе
XAOC
Всем Доброго время суток
Подскажите что здесь не так
Функция определяющая кто в online

//удаляем существующего
$del = mysql_query("delete from online where 'uix'+$winx < ".time()." or id_p = $id") or mysql_error();

//вставляем нового пользователя
$into = mysql_query("insert into online value ('','$id','".time()."')") or mysql_error();

//считаем пользователей
$sel = mysql_query("select id from online") or mysql_error();


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



Спустя 44 минуты, 52 секунды (21.08.2010 - 15:52) waldicom написал(а):
'uix'+$winx

это что за конструкция такая?

Спустя 1 час, 22 минуты, 21 секунда (21.08.2010 - 17:15) XAOC написал(а):
$winx = 300 - это время в нахождения пользователя в секундах
uix - это поле в таблице online которое имеет значение time() когда пользователь только вошол
вместе проверяем
если сумма uix+$winx будет меньше Time() тогда считать что он offline

Спустя 2 минуты, 21 секунда (21.08.2010 - 17:17) waldicom написал(а):
Цитата (XAOC @ 21.08.2010 - 16:15)
если сумма uix+$winx будет меньше Time() тогда считать что он Offline

я понимаю, но разве в where слева от знака равно не надо использовать иям поля, а не значение?
Проще говоря: вы просто выведете сформированный запрос и попробуйте его выполнить вручную.

Спустя 10 минут, 54 секунды (21.08.2010 - 17:28) XAOC написал(а):
в where там все правильно
проблема в том что эту функцию я писал так что она определяла IP пользователя
просто есть такая фигня что люди сидит на одном IP поэтому писала вместо 2 показывала 1
я захотел сделать на уникальный ID но первый запрос
Цитата
//удаляем существующего
$del = mysql_query("delete from online where 'uix'+$winx < ".time()." or id_p = $id") or mysql_error();

он выполнялся если вставить IP вместо ID то все работает
может есть другой способ потому что мне нужно знать кто именно на сайте и сколько

Спустя 19 минут, 34 секунды (21.08.2010 - 17:47) linker написал(а):
'uix'+$winx - это бред. 'uix', оно может в вашем понимании и является полем в таблице, но на усмотрение MySQL, это строка состоящая из трех символов. Поэтому 'uix' + $winx, есть 'uix' + 300 или просто 300. Т.е. получается запрос вида
delete from online where 300 < 123456789 or id_p = 2

Спустя 7 минут, 51 секунда (21.08.2010 - 17:55) XAOC написал(а):
uix = 123456765
хранит значение time() которое появится как только пользователь зашол на сайт
и последующее время time() изменяет свое значение
и я проверял что uix выводит то значение которое ему било задано

Спустя 13 минут, 56 секунд (21.08.2010 - 18:09) linker написал(а):
'uix' - это строка из трех символов
`uix` - это название поля в таблице
Чувствуете разницу?

Спустя 8 минут, 1 секунда (21.08.2010 - 18:17) XAOC написал(а):
не в этом проблема я проверял
уберал проверку на время
оставлял проверку на ID то он удалять не хотел

$del = mysql_query("delete from online where id_p = $id") or mysql_error();

$into = mysql_query("insert into online value ('','$id','')") or mysql_error();

$sel = mysql_query("select id from online") or mysql_error();

Спустя 2 дня, 1 час, 18 минут, 52 секунды (23.08.2010 - 19:36) XAOC написал(а):
linker
а вы знаете как можно по другому сделать что бы показывало кто в Online

Спустя 2 часа, 30 минут, 29 секунд (23.08.2010 - 22:06) linker написал(а):
Ну во-первых, какой лимит сессий? Если мне не изменяет память и я не ошибаюсь, то получить можно
$SecondsSessionLife = ini_get('session.gc_maxlifetime');
Значит показывать нужно всех, у кого uix > time() - $SecondsSessionLife, т.е. ну если грубо
$sel = mysql_query("select id from online where uix > " . (time() - $SecondsSessionLife));
Соответственно удалять всех у кого uix <=.

Спустя 52 минуты, 21 секунда (23.08.2010 - 22:59) XAOC написал(а):
спасибо этот метод работает
wink.gif но есть проблема
я же делаю запрос еще с ID пользователя если такой уже есть то его соответственно удаляем

и при каждом обновлением страницы кол. пользователей растет
т. э. когда время становится меньше он удаляет но если есть такой ID он его оставляет в чем может быть проблема ???

Спустя 9 минут, 4 секунды (23.08.2010 - 23:08) linker написал(а):
Ну все правильно, потому что у тебя INSERT, а не UPDATE. INSERT нужен когда пользователь только что авторизовался, а дальше простое UPDATE его сесссии.
$into = mysql_query("UPDATE `online` SET `uix` = '" . time() . "' WHERE `id_p` = '" . $id . "'") or mysql_error();
Удалять по ID, нужно только когда пользователь нажал ссылку, аля "выход", в остальных случаях удаляй все, что не подходит по времени.

Спустя 32 минуты, 55 секунд (23.08.2010 - 23:41) XAOC написал(а):
спасибо попробуем

Спустя 19 часов, 8 минут, 54 секунды (24.08.2010 - 18:50) Guest написал(а):
я попробовал ни чего не получилось при каждом обновлении кол. растет
вот функция

function online($id)
{
$winx = ini_get('session.gc_maxlifetime');
$t = time();
$upd = mysql_query("update online set unix='$t' where id_p='$id'") or mysql_error();
$into = mysql_query("insert into online(id_p,unix) values ('$id','$t')") or mysql_error();
$del = mysql_query("delete from online where unix <= ".($t - $winx)) or mysql_error();
$sel = mysql_query("select id from online where unix > ".($t - $winx)) or mysql_error();
return mysql_num_rows($sel);
}

Спустя 1 минута, 23 секунды (24.08.2010 - 18:51) XAOC написал(а):
linker
я попробовал ни чего не получилось при каждом обновлении кол. растет
вот функция

function online($id)
{
$winx = ini_get('session.gc_maxlifetime');
$t = time();
$upd = mysql_query("update online set unix='$t' where id_p='$id'") or mysql_error();
$into = mysql_query("insert into online(id_p,unix) values ('$id','$t')") or mysql_error();
$del = mysql_query("delete from online where unix <= ".($t - $winx)) or mysql_error();
$sel = mysql_query("select id from online where unix > ".($t - $winx)) or mysql_error();
return mysql_num_rows($sel);
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.