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

Тема в разделе "Wordpress", создана пользователем Teceract, 17 авг 2014.

Модераторы: Sorcus
  1. Teceract

    Teceract

    Регистр.:
    15 фев 2009
    Сообщения:
    160
    Симпатии:
    75
    Доброго времени дня!

    Недавно наткнулся на скрипт, который определяет статус пользователя по его последней активности.
    Скрипт рабочий, но до версии 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;

    }
    ?>
    Оригинал кода:
    http://blog.svnlabs.com/wordpress-user-is-online-or-offline/

    С версии 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);
    Так как записи о пользователе не добавляются в таблицу бд, то как я понял, параметр пустой и выходит ошибка.

    Собственно вопрос: как исправить проблему с добавлением данных в таблицу?
     
  2. ws256

    ws256

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