IPB Предупреждение [2] A non-numeric value encountered (Строка: 3050 файла /sources/ipsclass.php)
Онлайн Статус Собственными Ручищами - UoKit.com Форумы
 

Здравствуйте, гость ( Вход | Регистрация )

> Онлайн Статус Собственными Ручищами
Полезность материала
Понравилась статья?
Да [ 31 ] ** [72,09%]
Нет [ 1 ] ** [2,33%]
Многобукф [ 11 ] ** [25,58%]
Всего голосов: 43
Гости не могут голосовать 
Ozzy Osbourne
сообщение 23.10.2010, 21:09
Сообщение #1


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



В связи с тем что вопрос создания статуса для сервера на сегодняшний день актуальный и в личку мне пришло пару сообщений по этому поводу - я расскажу вам как его создать своими ручищами при помощи mysql+php и чашки чая

В данном уроке мы будем рассматривать ситуацию когда сфера (у меня 56b), mysql и apache находятся на одной машине (сервере). Такой подход сильнее грузит сферу, но более понятен на старте новичкам.

В качестве сервера может выступать: ваш домашний компьютер, выделенный сервер (ddc) либо виртуальный сервер (vds/vps).
  1. Для начала установим apache+mysql на машину. Для этого мы будем использовать многофункциональный набор xampp (apache+mysql+php+perl). При его установке на нашу машину сразу станет нужный нам апач и mysql. Почитать подробнее можно на вики (http://ru.wikipedia.org/wiki/XAMPP)

    Заходим на официальный сайт в раздел Windows (http://www.apachefriends.org/en/xampp-windows.html) и качаем XAMPP Windows [EXE]

    После того как скачали - открываем и устанавливаем, к примеру на C:\xampp

    На рабочем столе находим ярлычек ”XAMPP Control Panel” и запускаем. Он нам открываем xampp панельку. Тыкаем на кнопку ”start” возле ”apache” и ”mysql”. Спустя пару секунд службы стартанут, а рядом станут активны кнопки ”admin”.

    (IMG:http://automum.od.ua/uosoft/1.jpg)

    Открываем браузер, вводим http://localhost/ в поле адреса, если на экране видим приветствие от xampp - значит пока что вы все сделали правильно.

  2. Теперь когда mysql и apache мы установили, следует научить сферу работать с базой. Для этого открываем sphere.ini и находим (или добавляем) следующий текст:

    Цитата
    // MySql configuration.
    MYSQL=1
    MySqlHost=localhost
    MySqlUser=root
    MySqlPassword=
    MySqlDatabase=sphere


    По умолчанию пользователь базы данных root с пустым паролем. В качестве названия базы данных я выбрал sphere, её мы создадим позже.

    Теперь запускаем сферу (spheresrv.exe). Если в логе сферы не видим ошибку ”MySQL connect fail” - значит подключение к базе прошло успешно. Закрываем сферу, она нам пока не нужна.

  3. В папке scripts находим файл sphere_serv_triggers.scp и открываем его блокнотом к примеру. Находим в нем функцию ”f_onserver_timer” и добавляем в конец:

    Цитата
    IF (<DB.Connected>==0)
    DB.Connect
    DB.Query "SET NAMES utf8"
    DB.Query "SET CHARACTER SET utf8"
    DB.Query "SET character_set_client='utf8'"
    DB.Query "SET character_set_connection='utf8'"
    DB.Query "SET character_set_results='utf8'"
    RETURN 0
    ENDIF

    DB.Execute "DELETE FROM clients"
    FOR i 0 <EVAL (<SERV.Clients>-1)>
    IF (<SERV.Client.<LOCAL.i>.IsOnline>==1)
    DB.Execute "INSERT INTO clients VALUES ("<SERV.Client.<LOCAL.i>.UID>","<SERV.Client.<LOCAL.i>.Name>","<SERV.Client.<LOCAL.i>.MEMORYFINDTYPE.memory_guild.LINK.ABBREV>",<SERV.Client.<LOCAL.i>.Karma>,<SERV.Client.<LOCAL.i>.Fame>,<SERV.Client.<LOCAL.i>.Kills>,<FVAL <SERV.Client.<LOCAL.i>.SkillTotal>>)""
    ENDIF
    ENDFOR


    Если функцию f_onserver_timer не нашли - ничего страшного, создайте её [FUNCTION f_onserver_timer] в конце файла (перед [eof]) и добавьте тот код что я написал выше.

    В двух словах расскажу что мы сделали. Мы определили функцию f_onserver_timer которая автоматически запускается сферой каждые N минут и проводит указанные действия. В данном случае функция проверяет есть ли подключение к базе, если есть: а) очищает таблицу clients. б) добавляет всех пользователей что сейчас онлайн в таблицу clients

    По умолчанию запуск f_onserver_timer в сфере отключен, поэтому открываем sphere.ini и находим:

    Цитата
    // Amount of minutes to call f_onserver_timer (0 disables this, default)
    TimerCall=0


    Я устанавливаю значение в 5 минут:

    Цитата
    // Amount of minutes to call f_onserver_timer (0 disables this, default)
    TimerCall=5


    Это означает что каждые 5 минут будет запускатся функция f_onserver_timer и обновлять в базе текущих пользователей онлайн. Дурные идеи типа живого статуса обновляющегося без задержки - выкиньте нафиг, это сильно убьет вашу базу. Если напрягает пять минут - поставьте одну, но при большом онлайне это будет грузить базу и сервер в целом

  4. Теперь нам понадобится создать эту самую базу ”sphere” и таблицу ”clients”. Запускаем с рабочего стола ярлычек ”Xampp Control panel” и нажимаем кнопку ”admin” рядом с ”mysql”. Нам открываем популярный инструмент для работы с базами - phpmyadmin

    (IMG:http://automum.od.ua/uosoft/2.jpg)

    Вводим название новой базы данных, а рядом обязательно указываем кодировку полей ”utf8_general_ci” (мы же умные люди и используем только utf8!) и нажимаем ”создать”.

    (IMG:http://automum.od.ua/uosoft/3.jpg)

    База создалась и появилась в левом меню. Кликаем по названию ”sphere (0)” и нам открывается страница таблиц этой базы. Естественно таблиц у нас там не каких еще нету. Так как у нас урок для новичков, рассказывать как в ручную создавать поля для таблицы и тп я не буду (хотя это достаточно просто), поэтому просто нажимайте кнопку ”SQL” в менюшке вверху и в появившемся окошке вводите следующий код:

    Цитата
    CREATE TABLE IF NOT EXISTS `clients` (
    `uid` varchar(255) NOT NULL,
    `name` varchar(255) NOT NULL,
    `ABBREV` varchar(255) NOT NULL,
    `karma` varchar(255) NOT NULL,
    `fame` varchar(255) NOT NULL,
    `kills` varchar(255) NOT NULL,
    `SkillTotal` varchar(255) NOT NULL,
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    Нажимаем ОК и наша таблица создана.

    Запускаем нашу сферу, конектимся к ней хотя бы одним чаром и идем курить на указанный ”TimerCall” минут. Только окошко с phpmyadmin не закрывайте, еще понадобится.

    Когда указанное время истекло и функция добавление чаров в базу уже отработала - открываем нами любимый phpmyadmin и тыкаем на название таблицы ”clients” (в левой части страницы), а затем на кнопочку ”обзор” - в правой верхней части страницы.

    (IMG:http://automum.od.ua/uosoft/5.jpg)

    (IMG:http://automum.od.ua/uosoft/6.jpg)

    Если все окей и данные в базу добавились - тогда вы их сразу там и увидите:

    (IMG:http://automum.od.ua/uosoft/4.jpg)

    Если данные есть (т.е. инфа по тем юзерам что были онлайн) - тогда у нас все получилось. Сфера работает, база работает, в базу юзеры добавляются - значит осталось дело за маленьким, выводить информацию на вашем сайте.

  5. В нашем случае ваш сайт это http://localhost/ (локальный) или <a href=\"http://ваш_реальный_ip\" target=\"_blank\"><a href="http://ваш_реальный_ip" target="_blank">http://ваш_реальный_ip</a></a> (доступный для всех юзеров интернета). Открываем папку где устанавливали xampp (C:\xampp ?), открываем там папку htdocs и удаляем все что там внутри.

    Создаем файлик index.php следующего содержания:

    Цитата
    <?php
    // тут я указал наши данные для подключения к mysql
    $link = mysql_connect('127.0.0.1', 'root', '');
    if (!$link) {
    die('Could not connect: ' . mysql_error());
    }
    // название нашей базы
    mysql_select_db("sphere");
    // далем запроса в базу на получение всех пользователей
    $result = mysql_query("SELECT * FROM `clients` WHERE 1");
    // тег pre - для красивого вывода
    echo '<h1>Статистика</h1><pre>';
    // пробегаем по полученному массиву где $row это текущий пользователь
    while ($row = mysql_fetch_assoc($result)) {
    // выводим данные пользователя на экран
    print_r($row);
    }
    // закрываем тег
    echo '</pre>';
    // закрываем соединение с базой
    mysql_close($link);


    Теперь открываем браузер, вводим <a href="http://ваш_реальный_ip" target="_blank"><a href="http://ваш_реальный_ip" target="_blank">http://ваш_реальный_ip</a></a> - и вуаля, статистика прямо у вас на экране.

    (IMG:http://automum.od.ua/uosoft/7.jpg)

    Вы наверное ждали статистику в красивой зеленой табличке, а получили просто данные на экран. Но ведь это самое главное! Теперь вы умеете доставать данные с базы, а оформить их по своему это 10 минут времени и знания хотя бы 1й главы html учебника. Лень? Окей, немного передохну и опубликую в этой статье пример файла index.php с оформлением данных в виде таблицы.

    А вот если статистики совсем нет - тогда читаем ответ ниже.


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
ImProV1zator
сообщение 7.11.2019, 4:02
Сообщение #2


*****

Journeyman
Сообщений: 346
Регистрация: 22.11.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.232
Возраст: 20



Сделал вертикальную таблицу
Код
<table>
<tr>
<TH>Name</TH>
<tr><td><?php
      require ('connect.php');
        
      $number=1;
        
      $statement = $pdo->query("SELECT * FROM `clients` ORDER BY `Name` ASC LIMIT 500");

       while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
         echo "<tr><td>".$number++.". ";
         echo "<strong>".$row['name']."<strong>";    
         echo "</td>";
           echo "</td>";
           echo "</td>";
           echo "<tr><td>";
           echo "<strong>".$row['ABBREV']."<strong>";
                      echo "<td>Guild</td>";
                      echo "<tr><td>";
           echo "<strong>".$row['karma']."<strong>";
                      echo "<td>Karma</td>";
                                 echo "<tr><td>";
           echo "<strong>".$row['fame']."<strong>";
                      echo "<td>Fame</td>";
                                 echo "<tr><td>";
           echo "<strong>".$row['kills']."<strong>";
                      echo "<td>Kills</td>";
                                 echo "<tr><td>";
           echo "<strong>".$row['SkillTotal']."<strong>";
                      echo "<td>Skills Total</td>";
          
          
      }

?>
    </td>
</table>

https://ibb.co/YdkF3hq


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
$yst3m_3rr0r
сообщение 8.11.2019, 3:06
Сообщение #3


****

Apprentice
Сообщений: 262
Регистрация: 16.11.2010
Группа: Пользователи
Наличность: 6819
Из: United Kingdom
Пользователь №: 13.193



Цитата(ImProV1zator @ 7.11.2019, 4:02) *

Сделал вертикальную таблицу
https://ibb.co/YdkF3hq


По пробуй лучше мой вариант, должен красивее смотреться
Поиграй с CSS цветам ... подбери под свой сайт
Код
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Игроки</title>
<style>
table, th, td {
  border: 1px solid #cccccc;
  border-collapse: collapse;
}
th, td {
  padding: 5px;
  text-align: left;
}
th {
    background: #ededed;
}
</style>
</head>
<body>
  <table>
    <tr>
      <th><strong>Account</strong></th>
      <th><strong>Name</strong></th>
      <th><strong>IP</strong></th>
    </tr>
    <?php
      require ('connect.php');
        
      $number=1;
        
      $statement = $pdo->query("SELECT account,name,ip FROM `users` ORDER BY `name` ASC LIMIT 15");

      while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
        echo "<tr><td>".$number++.". ";
        echo $row['account'];
        echo "</td><td>".$row['name']."</td>";
        echo "</td><td>".$row['ip']."</td></tr>";
      }
    ?>
</table>
</body>
</html>


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ImProV1zator
сообщение 9.11.2019, 2:25
Сообщение #4


*****

Journeyman
Сообщений: 346
Регистрация: 22.11.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.232
Возраст: 20



Спасибо, но мне больше нравится вертикальный вариант.(так онлайн кажется больше, когда длинный список)
Добавил профессию:
Код
 <table>
<tr>
<TH>Name</TH>
<tr><td><?php
      require ('connect.php');
        
      $number=1;
        
      $statement = $pdo->query("SELECT * FROM `clients` ORDER BY `Name` ASC LIMIT 500");

       while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
         echo "<tr><td>".$number++.". ";
         echo "<strong>".$row['name']."<strong>";    
         echo "</td>";
           echo "</td>";
           echo "</td>";
           echo "<tr><td>";
           echo "<strong>".$row['ABBREV']."<strong>";
                      echo "<td>Guild</td>";
                      echo "<tr><td>";
           echo "<strong>".$row['Class']."<strong>";
                      echo "<td>Class</td>";
                      echo "<tr><td>";
           echo "<strong>".$row['karma']."<strong>";
                      echo "<td>Karma</td>";
                                 echo "<tr><td>";
           echo "<strong>".$row['fame']."<strong>";
                      echo "<td>Fame</td>";
                                 echo "<tr><td>";
           echo "<strong>".$row['kills']."<strong>";
                      echo "<td>Kills</td>";
                                 echo "<tr><td>";
           echo "<strong>".$row['SkillTotal']."<strong>";
                      echo "<td>Skills Total</td>";
          
          
      }

?>
    </td>
</table>



--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
DAMNED KING   Онлайн Статус Собственными Ручищами   23.10.2010, 21:09
DAMNED KING   Вопрос: Открываю http://мой_реальный_ип/ и вижу то...   23.10.2010, 21:21
DAMNED KING   Для вывода статуса в виде таблички - немного меняе...   23.10.2010, 21:34
Mirage   Тема нормальная. Только хотелось бы узнать в чем с...   24.10.2010, 16:14
DAMNED KING   Только хотелось бы узнать в чем существенные преи...   24.10.2010, 16:37
Destruction   Позволю себе не согласиться. Нагрузка будет выше ...   24.10.2010, 17:25
Mirage   MySQL хранит данные в файлах, если вы не знали. В...   24.10.2010, 20:39
Kanibal   Постоянно выскакивает вот это:   24.10.2010, 17:56
Soteric   Наверное запятая здесь на конце не нужна -- А э...   24.10.2010, 18:36
DAMNED KING   to Destruction Ох как я не люблю этот бредовый фл...   24.10.2010, 18:45
Kanibal   А это пчему выскакивает: :blink: ?   24.10.2010, 19:17
DAMNED KING   Почему то у тебя : Не отрабатывает. Сделай вот та...   24.10.2010, 19:19
Destruction   Я был вежлив.. и буду :) В ответ на твое мнение о...   24.10.2010, 23:02
DAMNED KING   Хватит засорять тему всяким бредом? Ага? Людей ко...   24.10.2010, 23:26
Warstone   Мда.. DAMNED KING, ты какой шард держишь-то? Мне п...   25.10.2010, 11:02
Phistan   DAMNED KING, советую не обращать на них внимания, ...   25.10.2010, 11:22
remiks   Очень полезный материал приношу свою благодарность...   25.10.2010, 14:24
Mirage   Поправьте меня если я ошибаюсь но мне кажется Dest...   25.10.2010, 15:10
DAMNED KING   Мда.. DAMNED KING, ты какой шард держишь-то? Мне ...   25.10.2010, 15:28
inkvizitor   MySQL query "INSERT INTO clients VALUES (...   28.3.2011, 11:18
Ozzy Osbourne   попробуй так: DB.Execute "INSERT INTO clients...   28.3.2011, 12:01
wap   LOL. :) У вас же скобки не хватает: <FVAL <S...   28.3.2011, 12:10
Ozzy Osbourne   LOL. :) У вас же скобки не хватает: <FVAL ...   28.3.2011, 12:14
inkvizitor   LOL. :) У вас же скобки не хватает: <FVAL ...   28.3.2011, 12:57
ImProV1zator   а как сюда впихнуть <FVAL <SERV.Client.<L...   15.7.2011, 12:38
ImProV1zator   пробавал вот так '<SERV.Client.<LOCAL.i...   16.7.2011, 20:39
ImProV1zator   разобрался '<db.escapedata <SERV.Client....   16.7.2011, 20:50
optima171   Ставлю ан 56б под хампп, но выдяёт ошибку когда за...   10.2.2012, 15:53
WRWR   CREATE TABLE IF NOT EXISTS `clients` ...   3.3.2013, 23:34
Ozzy Osbourne   Угу конечно, был молод и глуп :) Вобще если бы пи...   4.3.2013, 20:35
WRWR   только не координально а кардинально :)   5.3.2013, 2:56
fantasyuo   00:03:ERROR:(sphere_serv_triggers....   1.12.2014, 1:06
fantasyuo   00:03:ERROR:(sphere_serv_triggers...   23.1.2015, 17:11
Sirocco   UP из-за системы счисления, и/или версии сферы.   23.1.2015, 23:46
Llirik   Нет тут походу надо написать что-то типа: IF ...   28.6.2018, 1:20
ImProV1zator   В базу записывает чаров, но из базы php скрипт не ...   1.11.2019, 17:05
ImProV1zator   <?php $link = mysqli_connect('loc...   1.11.2019, 19:14
$yst3m_3rr0r   Давай на PDO перейдем ... более универсальна 1...   2.11.2019, 0:10
ImProV1zator   query("SELECT * FROM `clients` ORD...   2.11.2019, 3:27
Aimed   query("SELECT * FROM `clients` OR...   3.11.2019, 19:14
ImProV1zator   Что такое "движок сайта"? CMS (Content...   4.11.2019, 6:15
ImProV1zator   На Html таже самая ошибка...   4.11.2019, 10:02
Juzzver   И чем это тебе мешает? В phpMyAdmin зайди на сай...   4.11.2019, 11:40
ImProV1zator   На Dle не меняется кодировка,если ее поменять то в...   4.11.2019, 12:10
Aimed   Т.е. база данных это теперь движок сайта?)))) А ка...   4.11.2019, 14:04
ImProV1zator   Help не отображает статус база sphere, подбаза cli...   6.11.2019, 3:05
ImProV1zator   Может надо что то в .htacces прописать, чтобы php ...   6.11.2019, 5:34
ImProV1zator   Сделал сортировку по именам, но таблица сбивается ...   6.11.2019, 16:36
Aimed   1. Notice: Undefined index: Name in /home...   6.11.2019, 18:43
$yst3m_3rr0r   Сделал сортировку по именам, но таблица сбивается...   7.11.2019, 1:49
ImProV1zator   Ну, таблицу уже сам состряпаешь с помощью HTML ...   7.11.2019, 3:28
Aimed   Ну, таблицу уже сам состряпаешь с помощью HTML и ...   7.11.2019, 12:47
Aimed   бл** зачем редактировать сообщение...   6.11.2019, 20:20
ImProV1zator   Получилось только вот так: https://ibb.co/tMjXN8z   7.11.2019, 3:50
Juzzver   Сделал вертикальную таблицу https://ibb.co/YdkF3h...   7.11.2019, 22:41
$yst3m_3rr0r   А что б SQL селект написать и пыхой сгенерировать...   7.11.2019, 17:01
Juzzver   Попробуй выводить никнейм по буквам в столбик, т...   9.11.2019, 6:31
ImProV1zator   Попробуй выводить никнейм по буквам в столбик, т...   9.11.2019, 9:12
Aimed   Попробуй выводить никнейм по буквам в столбик, т...   9.11.2019, 14:12
ImProV1zator   У меня вопрос, как сделать чтобы выводилось число ...   9.11.2019, 9:42
alfapvp   Я смотрю многие тут ка кфраера сидят на форуме. ка...   9.11.2019, 22:14
Aimed   Я смотрю многие тут ка кфраера сидят на форуме. к...   9.11.2019, 23:00
ImProV1zator   Это как выбрать ячейки понятно SELECT COUNT(co...   10.11.2019, 2:51
ImProV1zator   Разобрался,всем спасибо <?php $con=mysqli...   10.11.2019, 3:10
Aimed   Разобрался,всем спасибо [code]<?php $con...   10.11.2019, 4:18


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 23.5.2024, 2:17
Designed by Nickostyle