{% else-1 %}
(19 ноя 2013, 19:11) (0/0) [0]
Например мы записали в базу последнее время онлайна польщователя и определили его в переменную
$user_online
создаём ограничение на 300 секунд
if (time()+300 >= $user_online){
здесь запрос на обновление времени онлайна в таблице users
}

както так.
(19 ноя 2013, 19:04) (0/0) [0]
Fallen, Сделай временное ограничение. Код длиннее но нагрузка на сервер mysql меньше
(19 ноя 2013, 19:02) (0/0) [0]
Fallen, Разбери код и найди удобный для тебя вариант
(19 ноя 2013, 19:00) (0/1) [-1]
Для особо тупых поясняю. Что не собираюсь писать какие то авторские коды, я даю лиш решение вопросов (проблем)
(19 ноя 2013, 18:57) (0/0) [0]
Fallen, Ты хотел решение, ты его получил. Чтото не нравится пиши лично, объясню своими словами, благо знания есть и пишу свои полноценные скрипты.
(19 ноя 2013, 18:52) (0/0) [0]
Если вы не знаете языка, то Вам на фриланс. Если же знаете, то наведу на идею: сделать в бд таблицу с онлайном пользователей. И когда пользователь заходит на сайт, забивать его id и время визита в неё и каждый раз при заходе на какую-либо страницу обновлять время визита последнего. Далее, на странице вывода списка онлайн, вывести всех пользователей из созданной таблицы, у которых, например, время последнего визита менее 2минут назад. Если больше, то удалить эту запись. Если что-то не понятно, спрашивайте.

Ну, во-первых создание таблицы будет выглядеть таким образом:
CREATE TABLE online (
id int(10) NOT NULL auto_increment,
ip varchar(20) NOT NULL default \'0\',
iduser varchar(80) NOT NULL default \'0\',
unix varchar(60) NOT NULL default \'\',
KEY id (id)
)
Код не проверял, будут ошибки, пиши - отладим вместе Теперь нужно на всех страницах сделать
include \'online.php\';
on_line();
А вот если нужно вывести таблицу пользователей онлайн, то так:
on_line(true);
Вот код online.php:


------ Файл online.php


/ ф-я подсчитывает пользователей на линии; возвращает кол-во пользователей в
отформатированном виде, т.е. для вывода результата нужно лишь прописать в
нужном месте типа: echo on_line(); /
function on_line($echousers = false) {
$host = \"localhost\"; // хост, где расположена база данных MySql
$db_name = \"\"; // имя базы данных; как правило совпадает с именем юзера
// (переменная ниже), хотя я категорически против одинаковых
// имен, ориентируясь на защиту...
$db_user = \"\"; // пользователь, которому разрешен доступ к базе
$db_password = \"\"; // пароль пользователя
$wine = 300; // точность он-лайн (секунды); время, в течении которого
// пользователя, зашедшего на страничку, мы считаем находящимся
// на сайте
$table_online = \"online\"; // имя таблицы
// делаем доступной глобальную переменную ИП-адреса
global $REMOTE_ADDR;
// соединяемся с сервером MySQL и выбираем нужную базу
mysql_connect($host,$db_user,$db_password) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());


// удаляем всех, кто уже пробыл $wine секунд или у кого ИП текущий
$sql_update = \"DELETE FROM $table_online WHERE unix+$wine < \".time().
\" OR ip = \'$_SERVER[REMOTE_ADDR]\'\";
$result_update = mysql_query($sql_update) or die(mysql_error());


// вставляем свою запись
$sql_insert = \"INSERT INTO $table_online(id,ip,iduser, unix) VALUES (\'\',\'$_SERVER[REMOTE_ADDR]\', \'$_SESSION[userid]\', \'\".time().\"\')\";
$result_insert = mysql_query($sql_insert) or die(mysql_error());


// считаем уников он-лайн
$sql_sel = \"SELECT id FROM $table_online\";
$result_sel = mysql_query($sql_sel) or die(mysql_error());


$online_people = mysql_num_rows($result_sel); // кол-во On-Line пользователей
$online_people = (string) $online_people; // приводим к строковому типу
// (так надо.. см. дальше)


$rain = strlen($online_people) - 1; // номер последнего символа в числе
// on-line юзеров


// форматирование вывода (я все сделал за вас =)
if($online_people[$rain]==2||$online_people[$rain]==3
||$online_people[$rain]==4
||(strlen($online_people)!=1&&$online_people[strlen($online_people)-2]!=1))
// $line - переменная, определяющая формат вывода
$line = \"человека\"; else $line = \"человек\";
// возвращаем результат
if($echousers==false)
return \"На сайте <strong>\".$online_people.\"</strong>$line\";
else{
echo \"<table>\";
while($row_sel = mysql_fetch_array($result_sel)){
$res2 = mysql_query(\"SELECT * FROM users WHERE pk_user=\'$row_sel[iduser]\'\"*;
$row2 = mysql_fetch_array($res2);
echo \"<tr><td>\".$row2[\'flname\'].\"</td></tr>\";
}
echo \"</table>\";
}
}
(19 ноя 2013, 18:48) (0/0) [0]
КОРОЛЬ, Я тоже самое написал в 5 сообшений, но автор сказал что это чуш.
(19 ноя 2013, 18:43) (1/0) [1]
Fallen, Чуш которая реализована в DCMS
(19 ноя 2013, 18:39) (1/0) [1]
zurix, Обяснил *
я тоже могу написать
up_time
uptime
time_up
timeup
(19 ноя 2013, 18:37) (0/0) [0]
1) запись в базу времени и в дальнейшем высчитыванием
2) запись в базу статуса(флажка) онлайн и с последующим его очисткой при помощи кронирования
  • 1 из 1