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


Автор: Serebrus 15.4.2009, 16:05
Привет.

Вот фрагмент из ответов на вопрос об автивности пользователей (онлайн ползователи):
Код

При каждом действии пользователя обновляешь у него ячейку в таблице, например (last_access) на $time ($time = time())...

http://forum.vingrad.ru/index.php?showtopic=165457&view=findpost&p=1209653 ссылка на этот ответ.

Есть ли "флаг", который изменяется при любом действии пользователя (подругому говоря реакция на события onclick, onmouseover, onkeypress, onsubmit,...)?

Автор: lelik133 15.4.2009, 16:44
onclick, onmouseover, onkeypress, onsubmit и проч. это события на стороне браузера пользователя, php и них никак узнать не может.
если хотите все это отлавливать используйте ajax.
передавайте php-скрипту на сервере id юзера, чтобы он обновил соответствующую строку в базе.

Автор: Serebrus 15.4.2009, 17:01
lelik133, если вы прочитали ответ (по ссылке), то что имел ввиду автор говоря: "При каждом действии пользователя обновляешь у него ячейку..."?
Многие статьи "советуют" токойже подход. Но как переодический можно отправлять ID юзера?
Мне надо принцип чата (само обновляемый список активных пользователей).

Автор: lelik133 15.4.2009, 17:06
имел в виду ячейку в таблице пользователей в БД

Автор: Serebrus 15.4.2009, 17:10
lelik133, нет вы меня не так понили:

Цитата(Serebrus @  15.4.2009,  17:01 Найти цитируемый пост)
что имел ввиду автор говоря: "При каждом действии пользователя ..."?

что это значит?

Автор: enof 15.4.2009, 17:13
Serebrus,
При обращении к серверу.

Автор: Serebrus 15.4.2009, 17:24
enof, 
Цитата(enof @  15.4.2009,  17:13 Найти цитируемый пост)
При обращении к серверу

если я не ошибаюсь, отправка запросов (get, post), нажатие на ссылку, это и есть обращение к серверу.

Нуу, get и post можно обработать, но как быть по вашему с ссылками?

Автор: enof 15.4.2009, 17:29
А при нажатии на ссылку что происходит?

Автор: Serebrus 15.4.2009, 17:35
enof, значить мне надо уловлять onclick события документа...
Можете показать примерный javascript код функции, которая выполняется при onclick, в документе?

Автор: enof 15.4.2009, 17:42
Serebrus, Какой еще onclick?  smile 
Вы понимаете как вообще все это работает, в частности http  и браузер?
У вас есть ссылка на страница, хотя это совершенно не важно.
Код

<a href="script.php">Script</a>

Браузер обращается к серверу, запускается ваш скрипт на сервере.
Значит нужно добавить в этот скрипт код, который будет обновлять запись в базе данных.

Автор: Serebrus 15.4.2009, 17:57
enof, я вас прекрасно понимаю, но вы меня не понимаете по моему  smile 
Немножко назад для ясности:
Цитата(enof @  15.4.2009,  17:42 Найти цитируемый пост)
У вас есть ссылка на страница, хотя это совершенно не важно.Разметка HTML1:<a href="script.php">Script</a>highlightSyntax('html_ZGNmNT','html');Браузер обращается к серверу, запускается ваш скрипт на сервере.Значит нужно добавить в этот скрипт код, который будет обновлять запись в базе данных.

хорошо если ссылок мало, а если ссылок более 50, или 100 (соответственно столко же и файлов), тогда как быть, че мне добавить обновляющий код в каждый файл что ли?
А если сделать как я думаю, то не имеет значение количество ссылок (уловление onclick).
Когда ползователь нажимает на любую ссылку, вызывается это функция и отправляется запрос к серверу для обновления ячейку пользователя в БД.

Автор: bars80080 15.4.2009, 18:04
Цитата(Serebrus @  15.4.2009,  17:57 Найти цитируемый пост)
че мне добавить обновляющий код в каждый файл что ли?

товарищ программист, а как насчёт локализации однотипного кода и добавления его в список функций, дабы вызывать его (в каждом файле) с помощью одной строчки?

мало того, так или иначе, у вас же должен быть уже подключаемый блок (конфиг или те же функции), что сложного добавить его туда?

Автор: enof 15.4.2009, 18:06
Цитата(Serebrus @  15.4.2009,  18:57 Найти цитируемый пост)

хорошо если ссылок мало, а если ссылок более 50, или 100 (соответственно столко же и файлов), тогда как быть, че мне добавить обновляющий код в каждый файл что ли?

Ну вот, в следующий раз будете продумывать архитектуру будущей системы smile 

Автор: Serebrus 15.4.2009, 18:25
Не, можно сделать как вы сказали: добавить код в каждый файл.
Неужели, этот подход не проще:
Цитата(Serebrus @  15.4.2009,  17:57 Найти цитируемый пост)
Когда ползователь нажимает на любую ссылку, вызывается это функция и отправляется запрос к серверу для обновления ячейку пользователя в БД.

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

Автор: enof 15.4.2009, 18:31
Цитата(Serebrus @  15.4.2009,  19:25 Найти цитируемый пост)
добавить код в каждый файл.

Пост барса прочитайте. Если вам надо в каждый файл код добавлять, то слишком уж криво сделано все наверн.
Цитата(Serebrus @  15.4.2009,  19:25 Найти цитируемый пост)
Когда ползователь нажимает на любую ссылку, вызывается это функция и отправляется запрос к серверу для обновления ячейку пользователя в БД.

Мне бы и в голову не пришло так извращаться. smile 

Автор: Sanchezzz 15.4.2009, 18:49
Меня ломает самапальный аякс. 
Чем раньше будешь использовать фреймворк тем лучше.

Для фреймворка mootools прости другим не доверяю.
Перед использованием JS кода нужно подключить скрипты фреймворка ссылка внизу...

Код

<a href="#" onclick="openGroup(255)">Жми</a>
<div id="MyDiv"></div>


Код

function ajaxPrepare(body){
var param_str="";
    if(typeof(body) == "string"){
        param_str = body.replace(/^\?/, "");
    }else if(typeof(body) == "object"){
        for(var name in body){
            if (!body.hasOwnProperty(name)) continue;
            if (name != '')
                param_str += "&" + name + "=" + escape(body[name]).replace(/\+/g, '%2B');
        }
    }
return param_str;
}

function openGroup(id){
var parms = {'ID': id };
var idDiv = 'MyDiv';
var div = new Element('div', {'class':'backgroudloader'});
var loader = new Element();
loader.set('html','L O A D I N G...');
    var dealogdata = new Request.HTML({
            method: 'post',
            url:'/script.php', //скрипт 
            evalScripts:true,
            data:ajaxPrepare(parms),
            onRequest: function(){
                $(idDiv).adopt(div);
                $(idDiv).adopt(loader);
            },
            onSuccess: function(a,b,c){
                $(idDiv).set('html',c);
            },
            onFailure: function(){
                alert('БУ');
            }
            }).send();    
} 


в скрипте php

Код

<? 
if(isset($_POST['ID']) and $_POST['ID']!=''):

print 'Ответ Вот тебе и событие!!!<br>';
print $_POST['ID'];

endif;
?>

где взять http://mootools.net

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