• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Online/Offline статус пользователя. Проблема с mysql

Teceract

Постоялец
Регистрация
15 Фев 2009
Сообщения
205
Реакции
117
Доброго времени дня!

Недавно наткнулся на скрипт, который определяет статус пользователя по его последней активности.
Скрипт рабочий, но до версии 3.8.2.

PHP:
<?php
session_start();
/*
** Создаем таблицу в бд
 
CREATE TABLE `wordpress_users_online` (
  `user_id` int(11) default NULL,
  `full_name` varchar(64) NOT NULL default '',
  `session_id` varchar(128) NOT NULL default '',
  `ip_address` varchar(15) NOT NULL default '',
  `time_entry` varchar(14) NOT NULL default '',
  `time_last_click` varchar(14) NOT NULL default '',
  `last_page_url` varchar(255) NOT NULL default ''
) ENGINE=MyISAM;

Шаг 1: Добавить в header.php

include("wordpress_users_online.php");
update_user_online();

Шаг 2: Вызываем функцию
 
is_online($user_id); 
*/

define('TABLE_USERS', 'wordpress_users');
define('TABLE_USER_ONLINE', 'wordpress_users_online');

  function update_user_online() {
    //global $user_id;
   
    global $current_user;
    get_currentuserinfo();

    if ($current_user->ID && $current_user->user_login) {

      $wo_user_id = $current_user->ID;
      $wo_full_name = $user['user_nicename'];

    } else {
      $wo_user_id = '';
      $wo_full_name = 'Guest';
    }

    $wo_session_id = session_id();
    $wo_ip_address = getenv('REMOTE_ADDR');
    $wo_last_page_url = getenv('REQUEST_URI');

    $current_time = time();
    $xx_mins_ago = ($current_time - 300);
   
// remove entries that have expired
    mysql_query("delete from " . TABLE_USER_ONLINE . " where time_last_click < '" . $xx_mins_ago . "'");

    $stored_user_query = mysql_query("select count(*) as count from " . TABLE_USER_ONLINE . " where session_id = '" . mysql_escape_string($wo_session_id) . "'");
    $stored_user = mysql_fetch_array($stored_user_query);

    if ($stored_user['count'] > 0) {
      mysql_query("update " . TABLE_USER_ONLINE . " set user_id = '" . (int)$wo_user_id . "', full_name = '" . mysql_escape_string($wo_full_name) . "', ip_address = '" . mysql_escape_string($wo_ip_address) . "', time_last_click = '" . mysql_escape_string($current_time) . "', last_page_url = '" . mysql_escape_string($wo_last_page_url) . "' where session_id = '" . mysql_escape_string($wo_session_id) . "'");
    } else {
      mysql_query("insert into " . TABLE_USER_ONLINE . " (user_id, full_name, session_id, ip_address, time_entry, time_last_click, last_page_url) values ('" . (int)$wo_user_id . "', '" . mysql_escape_string($wo_full_name) . "', '" . mysql_escape_string($wo_session_id) . "', '" . mysql_escape_string($wo_ip_address) . "', '" . mysql_escape_string($current_time) . "', '" . mysql_escape_string($current_time) . "', '" . mysql_escape_string($wo_last_page_url) . "')");
    }
}

function is_online($user_id) { 

$stored_user_query = mysql_query("select user_id from  ".TABLE_USER_ONLINE."  where user_id = '" . mysql_escape_string($user_id) . "'");
$stored_user = mysql_fetch_array($stored_user_query);

if(isset($stored_user['user_id']))
    $online = 'Online';
        else
    $online = 'Offline';

return $online;

}
?>
Оригинал кода:
Для просмотра ссылки Войди или Зарегистрируйся

С версии 3.9.х возникает проблема с insert into, в таблицу бд не добавляются данные о пользователе и возникает 2 одинаковых ошибки:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in строка, на которую ссылаются ошибки:
PHP:
$stored_user = mysql_fetch_array($stored_user_query);

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

Собственно вопрос: как исправить проблему с добавлением данных в таблицу?
 
Использовал плагин WP-UserOnline для этих целей.
Отображает сколько юзеров, гостей, ботов сейчас на сайте. Кто именно из юзеров на сайте. Где они сейчас. Бывает забавно наблюдать по активности как пытаются ломать сайт. НО когда посещаемость сайта больше 5000 в день создает сильную нагрузку.
 
Назад
Сверху