Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ Sphere Server 0.56 - Sphere X _ Онлайн Статус Собственными Ручищами

Автор: DAMNED KING 23.10.2010, 21:09

В связи с тем что вопрос создания статуса для сервера на сегодняшний день актуальный и в личку мне пришло пару сообщений по этому поводу - я расскажу вам как его создать своими ручищами при помощи 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”.

    Изображение

    Открываем браузер, вводим 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

    Изображение

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

    Изображение

    База создалась и появилась в левом меню. Кликаем по названию ”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” (в левой части страницы), а затем на кнопочку ”обзор” - в правой верхней части страницы.

    Изображение

    Изображение

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

    Изображение

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

  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> - и вуаля, статистика прямо у вас на экране.

    Изображение

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

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

Автор: DAMNED KING 23.10.2010, 21:21

Вопрос: Открываю http://мой_реальный_ип/ и вижу только слово "Статистика"! В чем проблема???
Ответ: Скорее всего у вас нет данных в базе. Такое может произойти если чаров нету онлайн, или вы вошли чаром после того как функция сбора статистики - отработала. Подождите минут 5 и посмотрите


Вопрос: Как поставить пароль на root пользователя mysql?
Ответ: Через phpmyadmin, вкладка "привилегии".


Вопрос: Открываю http://мой_реальный_ип/ и пишет сервер не найден
Ответ: Скорее всего вы подключаетесь к интернету через роутер (тобиш свич). Для этого в настройках роутера найдите "Port Forwarding" (перенаправление портов) и перенаправляйте 80й порт вашего свича на 80й порт вашего компа


Вопрос: http://localhost/ работает, а http://мой_реальный_ип/ - нет. Почему?
Ответ: Смотри ответ выше


Вопрос: У меня сайт находится на другом хостинге, не там где сервер. Как мне на сайте вывести данные из http://мой_реальный_ип_сервера/ ???
Ответ: Самый простой способ:
На своем хостинге создайте файл statistic.php, откройте его и введите:

Цитата
<?php
// For PHP 5 and up
$handle = fopen("http://ваш_реальный_ип_сервера/", "rb");
$contents = stream_get_contents($handle);
fclose($handle);

ну и оформляйте все это дело в дизайн вашего сайта.

Второй вариант - перекопировать файл index.php из этого урока к вам на хостинг (предварительно переименовав). И изменить настройки подключения к базе с localhost, на ваш_реальный_ип_сервера. Если на сервере разрешено использовать mysql удаленно - значит будет работать

Автор: DAMNED KING 23.10.2010, 21:34

Для вывода статуса в виде таблички - немного меняем наш index.php:

Цитата
<?php
// тут я указал наши данные для подключения к mysql
$link = mysql_connect('195.234.5.208', 'sphere', 'qJYyFx74RSFpWCcd');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
// название нашей базы
mysql_select_db("sphere");
// далем запроса в базу на получение всех пользователей
$result = mysql_query("SELECT * FROM `clients` WHERE 1");
// тег pre - для красивого вывода
?>
<table border="1" width="500">
<tr>
<td><b>Логин</b>
<td><b>Гильда</b>
<td><b>Карма</b>
<td><b>Фама</b>
<td><b>Убийства</b>
<td><b>Сум.скилл</b>
<?php
// пробегаем по полученному массиву где $row это текущий пользователь
while ($row = mysql_fetch_assoc($result)) {
// выводим данные пользователя на экран
?>
<tr>
<td><?php echo $row['name']?>
<td><?php echo $row['ABBREV']?>
<td><?php echo $row['karma']?>
<td><?php echo $row['fame']?>
<td><?php echo $row['kills']?>
<td><?php echo $row['SkillTotal']?>
<?php
}
?>
</table>
<?php
// закрываем соединение с базой
mysql_close($link);


Изображение

Автор: Mirage 24.10.2010, 16:14

Тема нормальная.
Только хотелось бы узнать в чем существенные преимущества mysql базы аккаунтов перед простой файловой?

PS очень бы неплохо было прикрепить подробное описание регистрации с сайта в mysql базу с последующим задействованием в игре. Либо вариант применяемый на некоторых серверах - связка аккаунта на сайте (форуме) с аккаунтом в игре. Оно конечно на любителя но в целях образования интересно.

Автор: DAMNED KING 24.10.2010, 16:37

Цитата(Mirage @ 24.10.2010, 16:14) *

Только хотелось бы узнать в чем существенные преимущества mysql базы аккаунтов перед простой файловой?


Ну это не актуальный вопрос на сегодня smile.gif В данной статье рассматривается конкретно mysql статистика по сравнению со стандартной, вот её приемущества
  1. Мы не нагружаем файловую систему сервера
  2. Возможность расширеной лог системы кто когда входил, сколько времени был онлайн и тп
  3. Возможность организовать полное отслеживание у какого чара на сколько вырос скил за день, появилось золота, прокачался лвл и тп
  4. Использование графиков при выводе статистики
  5. И куча, куча другого
Тут все зависит от фантазии и навыков разработчика.

Цитата(Mirage @ 24.10.2010, 16:14) *
PS очень бы неплохо было прикрепить подробное описание регистрации с сайта в mysql базу с последующим задействованием в игре. Либо вариант применяемый на некоторых серверах - связка аккаунта на сайте (форуме) с аккаунтом в игре. Оно конечно на любителя но в целях образования интересно.


вопрос регистрации через mysql это уже тема другой темы, которую я кстати уже частично описал вот тут - https://forum.uokit.com/index.php?showtopic=19112&st=20

Автор: Destruction 24.10.2010, 17:25

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

Позволю себе не согласиться. Нагрузка будет выше на сам сервер, а сфера может из-за этого тормозить, если на сервере недостаточно ресурсов.
Да и вопрос понимания - штука сложная. Обычно сайт, на котором нужно отображать статус - находится на отдельном хостинге, за который платят 100р/месяц.
Т.е. для изучения вашего урока - человеку придется установить и настроить для поддержки PHP свой веб-сервер, что несколько излишне (а описание этой процедуры все-таки не имеет отношения непосредственно к этому уроку).

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

Не согласен. Обновлять данные можно (я надеюсь можно?) когда персонаж входит/выходит из игры.
Обновление по первичному ключу базы в 100 тыс. записей будет занимать доли секунды и с базой ничего не сделает.

Цитата
DB.Execute "DELETE FROM clients"

Не DELETE, а TRUNCATE.

PS: Я лишь бегло пробежался по вашему уроку с целью выразить свое мнение, как веб-разработчика.


Цитата(Mirage @ 24.10.2010, 17:14) *
хотелось бы узнать в чем существенные преимущества mysql базы аккаунтов перед простой файловой?

MySQL хранит данные в файлах, если вы не знали.

В чем преимущество? - В том, что это специально предназначенный продукт реализующий большинство преимуществ реляционной СуБД.

О реляционных СуБД и их преимуществах можете почитать в интернете, в частности на mysql.com

Автор: Kanibal 24.10.2010, 17:56

Постоянно выскакивает вот это:

Цитата

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ENGINE=InnoDB DEFAULT CHARSET=utf8' at line 9

Автор: Soteric 24.10.2010, 18:36

Цитата
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;

Наверное запятая здесь на конце не нужна
Цитата
`SkillTotal` varchar(255) NOT NULL,

--
Цитата
$result = mysql_query("SELECT * FROM `clients` WHERE 1");

А это зачем?

Автор: DAMNED KING 24.10.2010, 18:45

to Destruction

Ох как я не люблю этот бредовый флуд лишь бы выпендриться что "я тоже что то знаю". Ну ладно, отвечу вам на сообщение и надеюсь на этом засорение темы прекратится.

Вывод статус сервера из базы на стороннем хостинге - дело может быть очень геморройным. По умолчанию на серверах закрывают удаленное использование БД и было бы куча текса "как открыть mysql для сторонних подключений", а в целях безопасности еще и объяснять как открывать конкретно для IP своего хостинга что б не начали пресенговать базу лишними подключениями. Мне кажется подход все на одном сервере для новичков намного понятнее и удобнее. Считаешь иначе? Считай дальше..

А теперь по тексту:

Цитата
Нагрузка будет выше на сам сервер, а сфера может из-за этого тормозить, если на сервере недостаточно ресурсов.


А я что не так написал? Или мне нужно было уточнять ЧТО КОНКРЕТНО будет тормозить НА сервере или это имеет такую важную роль?! Мой урок не для даунов, а для новичков. Поэтому считаю разумным не объяснять что когда тормозит сервер из-за нехватки ресурсов - сфера тоже будет тормозить.

Цитата
Т.е. для изучения вашего урока - человеку придется установить и настроить для поддержки PHP свой веб-сервер, что несколько излишне (а описание этой процедуры все-таки не имеет отношения непосредственно к этому уроку).


Для изучения моего урока человек не отходя от собственного домашнего компа где у него стоит сфера - качает xampp и поднимает веб-сервер за два клика. Хочешь рассказать как поднимать мускул на винде без веб-сервера, а потом настраивать сторонний софт для работы с базой - валяй, я использую для этого свой подход. А уж если закрыто удаленное подключение, то с базой работать только через "удаленный рабочий стол+сторонни_софт" что весьма не удобно. Я некому ничего не навязываю, я рассказываю свой подход если это еще не понятно. Хочешь рассказать другой подход - в виде отдельного урока.

Цитата
Не согласен. Обновлять данные можно (я надеюсь можно?) когда персонаж входит/выходит из игры.Обновление по первичному ключу базы в 100 тыс. записей будет занимать доли секунды и с базой ничего не сделает.


Можно. А нужно ли? Лично я использую кеширование данных на 5 минут и делаю выборку данных с базы не каждое обновление страницы. В вашем случае селект к базе будем делать каждый рефреш страницы. А стоит ли этого того? Мне кажется лишнее, достаточно "живого" статуса онлайн внутри игры.

Цитата
Не DELETE, а TRUNCATE.


Делит понятнее для новичков. Учитывая что работают два подхода, я выбрал тот что понятнее для прочтения кода.



to Kanibal
Угу, там лишняя запятая. Soteric правильно заметил.


to all
отредактируйте плиз свои сообщения что б вместо <code> было <quote>, то тема поползла(

Автор: Kanibal 24.10.2010, 19:17

А это пчему выскакивает:

Цитата

MySQL query "INSERT INTO clients VALUES ("06260","Kanibal","0",1272,10000,0,)" failed due to "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1"

blink.gif ?

Автор: DAMNED KING 24.10.2010, 19:19

Почему то у тебя :

Цитата
<FVAL <SERV.Client.<LOCAL.i>.SkillTotal>

Не отрабатывает. Сделай вот так тогда чисто для проверки:
Цитата
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>,0)""

Автор: Mirage 24.10.2010, 20:39

Цитата(Destruction @ 24.10.2010, 18:25) *

MySQL хранит данные в файлах, если вы не знали.
В чем преимущество? - В том, что это специально предназначенный продукт реализующий большинство преимуществ реляционной СуБД.
О реляционных СуБД и их преимуществах можете почитать в интернете, в частности на mysql.com

При всем моем уважении информация совершенно бессмысленна. Я конечно не гений как Шелдон и ТББ но с базами данных имел дело в процессе работы.
Вопрос (на который ответил автор темы, вполне удовлетворив меня своим ответом) возможно был не совсем корректно сформулирован, но был задан к тому что в сфере присутствует создание онлайн статуса штатными средствами. И мне не понятно зачем задействовать средства которые даже вы не в состоянии описать не прибегая к спец литературе. К слову по умолчанию обновление status.html стоит с минутной паузой и не сильно нагружает сервер.

К велосипеду тоже атомный двигатель можно прикрутить и получится нехреновая штука.

А насчет сложностей с установкой апача, php и mysql по-моему это значительно проще сделать имея под рукой информативность интернета чем написать нормальный скрипт для сферы при существующем дефиците хорошей литературы и систематизированных уроков.

Автор: Destruction 24.10.2010, 23:02

Я был вежлив.. и буду smile.gif

В ответ на твое мнение о моем комментарии - поделюсь своим мнением о твоем: нужно спокойнее относится к критике.

Цитата
А я что не так написал? Или мне нужно было уточнять ЧТО КОНКРЕТНО будет тормозить НА сервере или это имеет такую важную роль?! Мой урок не для даунов, а для новичков. Поэтому считаю разумным не объяснять что когда тормозит сервер из-за нехватки ресурсов - сфера тоже будет тормозить.

Ты перепутал причину и следствие - ты написал, что тормозить будет сфера. Я могу понять неточные выражения с целью упрощения понимания, но здесь такого не наблюдается.

Цитата
Для изучения моего урока человек не отходя от собственного домашнего компа где у него стоит сфера - качает xampp и поднимает веб-сервер за два клика. Хочешь рассказать как поднимать мускул на винде без веб-сервера, а потом настраивать сторонний софт для работы с базой - валяй, я использую для этого свой подход. А уж если закрыто удаленное подключение, то с базой работать только через "удаленный рабочий стол+сторонни_софт" что весьма не удобно. Я некому ничего не навязываю, я рассказываю свой подход если это еще не понятно. Хочешь рассказать другой подход - в виде отдельного урока.

А я лишь делюсь своим мнением, чтобы ваше не было единственно верным. Зачем в штыки-то ?

Цитата
Можно. А нужно ли? Лично я использую кеширование данных на 5 минут и делаю выборку данных с базы не каждое обновление страницы. В вашем случае селект к базе будем делать каждый рефреш страницы. А стоит ли этого того? Мне кажется лишнее, достаточно "живого" статуса онлайн внутри игры.

Вы не уловили суть. Еще раз вас процитирую:
>>Дурные идеи типа живого статуса обновляющегося без задержки - выкиньте нафиг, это сильно убьет вашу базу.
Это бред. Так яснее, что я хотел сказать?

Цитата
Делит понятнее для новичков. Учитывая что работают два подхода, я выбрал тот что понятнее для прочтения кода.

Есть принципиальная разница между двумя командами.

Еще понятнее будет - если выбрать все записи и по одной их удалять, чтобы в таблице совсем-совсем ничего не осталось, но что-то я не вижу активистов использовать такой способ (вернее один раз встретился, поэтому и припомнил).

Да и насчет понятнее - сомнительно, так ли понятнее использовать неправильную команду?

http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html

Почитайте, узнаете новую для себя команду.

Mirage, когда я отвечал - я видимо не заметил его ответ. В любом случае - все то, что написал автор вы можете найти самостоятельно в интернете и даже больше, что я собственно говоря и посоветовал.

Мне даже будет не лень заглянуть в гугл и привести из него цитаты соответствующие каждому пункту, который указал автор. Нужно?

Добавлено:
Вы, кстати, не там ставите кэширование. Запись в локальную СуБД, раз уж вы её используете - операция слабо напряжная.

А вот дергать каждый раз сервер спрашивая с него данные - весьма затратно.

Соответственно - там кэширование можете убрать и сделать обновление по заходу/выходу, нагрузки это не даст. А вот где данные берутся:

Код
$cache_file = "accounts.info"; // файл кэша
$cache_time = 5*60; // время кэширования - 5 минут
if( ! is_readable( $cache_file ) || time() - $cache_time > filemtime( $cache_file ) ){
    $content = file_get_contents("http://ваш_реальный_ip_сервера/");
    file_put_contents( $cache_file, $content );
}
else{
    $content = file_get_contents( $cache_file );
}


Тут может быть проблемка, в случае двух параллельных запросов.. Но это уже отдельная тема про кэш для highload-проектов - с местными нагрузками проблемы не будет.

Еще было бы полезно добавить проверку на доступность удаленного хоста. Помнится на Антаресе не было такой проверки (и там использовался такой же подход, в плане передачи данных между серверами) и выскакивала ошибка с указанием кучи интересной информации.

Автор: DAMNED KING 24.10.2010, 23:26

Хватит засорять тему всяким бредом? Ага?

Людей которые заинтересованы в материале читать весь этот бред будет напрягать. Лучше потрать свои силы и блесни знаниями отвечая КОНСТРУКТИВНО людям, которые возможно зададут тут свои вопросы.

Автор: Warstone 25.10.2010, 11:02

Мда.. DAMNED KING, ты какой шард держишь-то? Мне просто чтоб туда не попасть ненароком с таким неадекватным стаффом. Дестракшн пока верные замечания давал. Ну и от себя добавлю: Это гораздо медленней решение. Фаил на отдачу закешируется уже конечный, а с ПхП вы каждый раз его будите генерировать. Поэтому ваше решение отъедает заведомо больше ресурсов.

Автор: Phistan 25.10.2010, 11:22

DAMNED KING, советую не обращать на них внимания, нервы сохранишь... Ибо бестолковый спор

Автор: remiks 25.10.2010, 14:24

Очень полезный материал приношу свою благодарность DAMNED KING. Большое спс......

Автор: Mirage 25.10.2010, 15:10

Поправьте меня если я ошибаюсь но мне кажется Destruction и DAMNED KING обсуждая (не будем говорить "споря") обновление статуса говорят о разных вещах и как следствие оба правы и оба ошибаются.
Если задаться целью отображать только количество человек онлайн то более подходит способ предложенный Destruction (записывать изменения при конекте и дисконекте пользователя), если же необходимо динамически отслеживать изменение персонажа на предмет скиллов, убийств, нахождения в гильдии то без передергивания по таймеру не обойтись. Но правильно написанное обновление не приведет к видимым сбоям. В конце концов у нас не миллиарды записей чтобы затормозить сервер уменьшением времени обработки. Ногами только не бейте - я все таки не на том уровне пока что нахожусь чтобы спорить на равных wink.gif


Материал для ознакомления представлен интересный для средней силы скриптера который уже не задает вопроса "а куда сохранять код скрипта O_о" и который может изменить чтото под себя (если не получается написать с 0). Для более углубленного изучения лучше будет воспользоваться технической литературой по языкам программирования, верстке html и php страниц и скульным базам.

PS автору все таки хочется пожелать чуть большей сдержанности. Конечно не приятно когда ктото критикует труд но любая критика имеет право быть - не все могут оптимальный вариант сразу найти. Ктото может посоветовать более простое или (иногда) правильное решение. Тем более что форум и нужен для ОБСУЖДЕНИЯ. А насчет почистить флуд есть модераторы. А так, автор - молоток. Пиши исче.

Автор: DAMNED KING 25.10.2010, 15:28

Цитата(Warstone @ 25.10.2010, 11:02) *

Мда.. DAMNED KING, ты какой шард держишь-то? Мне просто чтоб туда не попасть ненароком с таким неадекватным стаффом. Дестракшн пока верные замечания давал. Ну и от себя добавлю: Это гораздо медленней решение. Фаил на отдачу закешируется уже конечный, а с ПхП вы каждый раз его будите генерировать. Поэтому ваше решение отъедает заведомо больше ресурсов.


Я не держу шард, так что не попадешь smile.gif А т.к. стафом я не являюсь, то вполне имею право быть не адекватным (в вашем понимании) biggrin.gif С Дистракшином мы уже все обсудили, он не понял меня, я не понял его. В данном примере не идет разговор про оптимизацию и как это все дело можно сделать лучше. Я говорил про то что если использовать mysql рядом с сферовым сервером, а хостинг - на другом сервере : тогда сталкнемся с кое какой проблемой. При заходе на страницу статистики будет происходить коннект у удаленному серверу mysql для выборки данных что достаточно медленно (как минимум 1-2 сек при хорошем коннекте, а то и больше), а потом еще время на обработку данных и её вывод. Что бы такого не происходило я и предложил кеширование данных каждые 5 минут, что б не подключатся к удаленной БД каждое обновление странички статуса, а брать данные с кеша. При работе с кешем в данном случае скорость будет на порядок выше, а нагрузка на базу на несколько порядков ниже т.к. будет идти только 1 выборка в течении 5 минут, а не столько раз сколько обновлена страница.

Вот собственно это была одна из причин спора которую мы уже решили в личке. Если вы считаете что кеширование в описанном мною способе лишнее и есть более быстрые способы - готов вас выслушать.

Цитата(Phistan @ 25.10.2010, 11:22) *

DAMNED KING, советую не обращать на них внимания, нервы сохранишь... Ибо бестолковый спор


ага, спс. самому не нравится засырание темы всякими "у кого яйца круче"

Цитата(remiks @ 25.10.2010, 14:24) *

Очень полезный материал приношу свою благодарность DAMNED KING. Большое спс......


пожалуйста smile.gif

Цитата(Mirage @ 25.10.2010, 15:10) *

...


Да мы с ним просто о разных вещах говорили. В любом случае я его понял, он надеюсь меня тоже.

Автор: inkvizitor 28.3.2011, 11:18

Код
MySQL query "INSERT INTO clients VALUES ("0b38c","ololo","0",0,0,0,<FVAL 6103)


Сфера пишет.
Не могу понять почему.

Точнее даже не могу понять откуда он берет значение <FVAL 6103 ошибка точно в нем, но откуда берет его сфера ) не понятно.

Автор: Ozzy Osbourne 28.3.2011, 12:01

попробуй так:

Код
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>>)""

Автор: wap 28.3.2011, 12:10

LOL. smile.gif У вас же скобки не хватает:
<FVAL <SERV.Client.<LOCAL.i>.SkillTotal>>

Автор: Ozzy Osbourne 28.3.2011, 12:14

Цитата(wap @ 28.3.2011, 12:10) *

LOL. smile.gif У вас же скобки не хватает:
<FVAL <SERV.Client.<LOCAL.i>.SkillTotal>>


Таки да, спс smile.gif
Исправил

Автор: inkvizitor 28.3.2011, 12:57

Цитата(wap @ 28.3.2011, 12:10) *

LOL. smile.gif У вас же скобки не хватает:
<FVAL <SERV.Client.<LOCAL.i>.SkillTotal>>


Ага, спасибо. Исправил.

Автор: ImProV1zator 15.7.2011, 12:38

а как сюда впихнуть
<FVAL <SERV.Client.<LOCAL.i>.region.name>>
<SERV.Client.<LOCAL.i>.region.name>>
?
13:39:ERROR:MySQL query "INSERT INTO Online VALUES ("09ec8","ImProVizator","0","2874","8151","0","0.1")" failed due to "Duplicate entry '9' for key 1"

Автор: ImProV1zator 16.7.2011, 20:39

пробавал вот так
'<SERV.Client.<LOCAL.i>.region.name>'

но если записывается какойнить Nujel'm то вылетает ошибка

Код

21:27:ERROR:MySQL query "INSERT INTO Online(name,guild,karma,fame,kills,location) VALUES('fokuss','0','-90','0','0','Nujel'm')" failed due to "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'm')' at line 1"


если заменить ковычки на ", то

Код

21:31:ERROR:MySQL query "INSERT INTO Online(name,guild,karma,fame,kills,location) VALUES("Smooth Wave","0","0","0","0","Felucca" failed due to "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"Felucca' at line 1"

Автор: ImProV1zator 16.7.2011, 20:50

разобрался
'<db.escapedata <SERV.Client.<LOCAL.i>.region.name>>'

Автор: optima171 10.2.2012, 15:53

Ставлю ан 56б под хампп, но выдяёт ошибку когда заливаю


Цитата
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;



Код
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') TYPE=InnoDB DEFAULT CHARSET=utf8' at line 9

Автор: WRWR 3.3.2013, 23:34

Код
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;


запятая в конце лишняя была
а так ну карма фэйм килс скилтотал этож не варчар, ну да ладно

Автор: Ozzy Osbourne 4.3.2013, 20:35

Угу конечно, был молод и глуп smile.gif

Вобще если бы писал сейчас - координально бы все переделал, но для потомков пригодится и это )

Автор: WRWR 5.3.2013, 2:56

только не координально а кардинально smile.gif

Автор: fantasyuo 1.12.2014, 1:06

Код
00:03:ERROR:(sphere_serv_triggers.scp,176)Can't resolve <SERV.Client.00.IsOnline>
00:03:ERROR:(sphere_serv_triggers.scp,176)Undefined symbol ''
00:03:ERROR:(sphere_serv_triggers.scp,176)Can't resolve <SERV.Client.0ffffffff.IsOnline>
00:03:ERROR:(sphere_serv_triggers.scp,176)Undefined symbol '

blink.gif
iza chevo error mozet bitj ?

Автор: fantasyuo 23.1.2015, 17:11

Цитата(fantasyuo @ 1.12.2014, 2:06) *

Код
00:03:ERROR:(sphere_serv_triggers.scp,176)Can't resolve <SERV.Client.00.IsOnline>
00:03:ERROR:(sphere_serv_triggers.scp,176)Undefined symbol ''
00:03:ERROR:(sphere_serv_triggers.scp,176)Can't resolve <SERV.Client.0ffffffff.IsOnline>
00:03:ERROR:(sphere_serv_triggers.scp,176)Undefined symbol '

blink.gif
iza chevo error mozet bitj ?

UP

Автор: Sirocco 23.1.2015, 23:46

Цитата(fantasyuo @ 23.1.2015, 17:11) *

UP

из-за системы счисления, и/или версии сферы.

Автор: Llirik 28.6.2018, 1:20

Нет тут походу надо написать что-то типа:

IF <SERV.Clients> // если есть хотя бы 1 игрок на серве!
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
endif

Смысл в том, если нету ни одного игрока на серве, то он не может обработать 0 -1

Автор: ImProV1zator 1.11.2019, 17:05

В базу записывает чаров, но из базы php скрипт не достаёт.может я как то криво в html пихаю?
Отображается только списки (никнейм,гильдия,карма и т.д.) но самих показателей нет.

Автор: ImProV1zator 1.11.2019, 19:14

Код
<?php
$link = mysqli_connect('localhost', 'impro', 'knock', 'sphere');

if (!$link) {
    echo "Ошибка: Невозможно установить соединение с MySQL." . PHP_EOL;
    echo "Код ошибки errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo "Соединение с MySQL установлено!" . PHP_EOL;
echo "Информация о сервере: " . mysqli_get_host_info($link) . PHP_EOL;
?>

<?php
// закрываем соединение с базой
mysql_close($link);
?>


как дальше выветси из базы sphere, clients ?

Автор: $yst3m_3rr0r 2.11.2019, 0:10

Давай на PDO перейдем ... более универсальна

1) Создаем сам коннект к сфере - connect.php

Код
<?php

    $host = '127.0.0.1';
    $db   = 'sphere';
    $user = 'root';
    $pass = '';
    $charset = 'utf8';

    $options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    
    $connection = "mysql:host=$host;dbname=$db;charset=$charset";
    try {
         $pdo = new PDO($connection, $user, $pass, $options);
    } catch (\PDOException $e) {
         throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }

?>


2) Вывод игроков из таблицы client и сортируем их по имени ... лимит сделаем 15 например
Создадим файлик view.php
Код
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Игроки</title>
</head>
<body>
  <table>
  <div>
    <?php
      require ('connect.php');
        
      $number=1;
        
      $statement = $pdo->query("SELECT * FROM `clients` ORDER BY `Name` ASC LIMIT 15");

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



Пробуй, пиши что получилось

Автор: ImProV1zator 2.11.2019, 3:27

Код
query("SELECT * FROM `clients` ORDER BY `Name` ASC LIMIT 15"); while($row = $statement->fetch(PDO::FETCH_ASSOC)) { echo "
".$number++.". "; echo "".$row['Name'].""; } ?>


у меня движок сайта на windows-1251 кодировке, не знаю, как поменять.

Автор: Aimed 3.11.2019, 19:14

Цитата(ImProV1zator @ 2.11.2019, 1:27) *

Код
query("SELECT * FROM `clients` ORDER BY `Name` ASC LIMIT 15"); while($row = $statement->fetch(PDO::FETCH_ASSOC)) { echo "
".$number++.". "; echo "".$row['Name'].""; } ?>


у меня движок сайта на windows-1251 кодировке, не знаю, как поменять.



Что такое "движок сайта"?

Автор: ImProV1zator 4.11.2019, 6:15

Цитата(Aimed @ 3.11.2019, 19:14) *

Что такое "движок сайта"?

CMS (Content Managment System).Система управления сайтом.

Да уже поменял на стандартный Html в кодировке Utf8...

Автор: ImProV1zator 4.11.2019, 10:02

На Html таже самая ошибка...

Автор: Juzzver 4.11.2019, 11:40

Цитата
у меня движок сайта на windows-1251 кодировке, не знаю, как поменять.

И чем это тебе мешает?
Цитата
На Html таже самая ошибка...

В phpMyAdmin зайди на сайте и там выставь нужную тебе кодировку.

Автор: ImProV1zator 4.11.2019, 12:10

На Dle не меняется кодировка,если ее поменять то вся админ панель и сайт будут в вопросиках.Я уже сменил сайт, всё норм =)
Только вот статус не выводится все равно.

Автор: Aimed 4.11.2019, 14:04

Т.е. база данных это теперь движок сайта?))))
А какая ошибка в html была? В cp1251 все должно работать, хоть это и является плохой практикой. Лучше везде utf8 использовать. И главное чот б веб сервер в хедере другую кодировку на слал, которая отличается от той что в html прописана.

Автор: ImProV1zator 6.11.2019, 3:05

Help
не отображает статус
база sphere, подбаза clients
uid name karma fame kills skilltotal

Автор: ImProV1zator 6.11.2019, 5:34

Может надо что то в .htacces прописать, чтобы php включилось?

Автор: ImProV1zator 6.11.2019, 16:36

Сделал сортировку по именам, но таблица сбивается если добавить вторую колонку гильдий, то переходит на новую строку.
помогите оформить под таблицу

Код
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Freedom Server Status</title>

    <link rel="stylesheet" type="text/css" href="css/css.css">

</head>

<body>
<table>
<tr>
<TH>Имя</TH>
<TH>Гильдия</TH>
<TH>Карма</TH>
<TH>Известность</TH>
<TH>Убийства</TH>
<TH>Навыки</TH>
<tr><td><?php
      require ('connect.php');
        
      $number=1;
        
      $statement = $pdo->query("SELECT * FROM `clients` ORDER BY `Name` ASC LIMIT 15");

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

?><td><?php
      require ('connect.php');
        
      $number=1;
        
      $statement = $pdo->query("SELECT * FROM `clients` ORDER BY `Name` ASC LIMIT 15");

       while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
         echo "<td>".$number++.". ";
         echo "<strong>".$row['ABBREV']."<strong>";    
         echo "</td>";        
      }

?></td><td>3</td><td>4</td><td>5</td></tr>

</table>

    <script type="text/javascript" src="js/js.js"></script>

Автор: Aimed 6.11.2019, 18:43

Цитата(ImProV1zator @ 6.11.2019, 14:36) *

Код
1.
Notice: Undefined index: Name in /home/bhx20369/public_html/status_online.php on line 21
2.
Notice: Undefined index: Name in /home/bhx20369/public_html/status_online.php on line 21
3.
Notice: Undefined index: Name in /home/bhx20369/public_html/status_online.php on line 21
mysqli_close($link); ?>



А ты читаешь что написано в сообщении? Там номер строки в файле status_online.php указывается. Этот файл с кодом ты сюда не выложил и каким образом тут тебе помогать?

Автор: Aimed 6.11.2019, 20:20

Прикрепленное изображение

бл** зачем редактировать сообщение...

Автор: $yst3m_3rr0r 7.11.2019, 1:49

Цитата(ImProV1zator @ 6.11.2019, 16:36) *

Сделал сортировку по именам, но таблица сбивается если добавить вторую колонку гильдий, то переходит на новую строку.
помогите оформить под таблицу

Код
    <?php
      require ('connect.php'); // Подключение к БД
        
      $statement = $pdo->query("SELECT uid,account,name FROM `users` ORDER BY `name` ASC LIMIT 15"); // Тут мы в нашу переменную забиваем запрос и делаем выборку из таблицы USERS и выбираем то, что нам надо, а именно UID/ACCOUNT/NAME

       while($row = $statement->fetch(PDO::FETCH_ASSOC)) { // Дальше идет цикл который в переменную $row записывает весь наш предыдущий запрос в БД
         echo "<tr><td> ".$row['uid']." ".$row['account']." ".$row['name']." </td></tr>"; // Выводим на экран
      }
    ?>


Ну, таблицу уже сам состряпаешь с помощью HTML и CSS ... особо ума не надо


Автор: ImProV1zator 7.11.2019, 3:28

Цитата($yst3m_3rr0r @ 7.11.2019, 1:49) *



Ну, таблицу уже сам состряпаешь с помощью HTML и CSS ... особо ума не надо

Благодарю

Автор: ImProV1zator 7.11.2019, 3:50

Получилось только вот так:
https://ibb.co/tMjXN8z

Автор: ImProV1zator 7.11.2019, 4:02

Сделал вертикальную таблицу

Код
<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

Автор: Aimed 7.11.2019, 12:47

Цитата($yst3m_3rr0r @ 6.11.2019, 23:49) *

Ну, таблицу уже сам состряпаешь с помощью HTML и CSS ... особо ума не надо


А что б SQL селект написать и пыхой сгенерировать хтмл, много ума надо? Вместо того что бы его огрызками кормить, за которыми он постоянно сюда будет бегать, лучше 1 раз правильно научить мыслить и решать свои проблемы самостоятельно. Он все мог сам найти в интернете, нагуглить и решить.

Автор: $yst3m_3rr0r 7.11.2019, 17:01

Цитата(Aimed @ 7.11.2019, 12:47) *

А что б SQL селект написать и пыхой сгенерировать хтмл, много ума надо? Вместо того что бы его огрызками кормить, за которыми он постоянно сюда будет бегать, лучше 1 раз правильно научить мыслить и решать свои проблемы самостоятельно. Он все мог сам найти в интернете, нагуглить и решить.
Конечно много не надо ... но, иногда кинуть "агрызок" тоже не плохо ) глядишь и целое яблоко получиться ))) Автор доволен, проблему он решил )

Автор: Juzzver 7.11.2019, 22:41

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

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

Прикрепленное изображение

Автор: $yst3m_3rr0r 8.11.2019, 3:06

Цитата(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>

Автор: ImProV1zator 9.11.2019, 2:25

Спасибо, но мне больше нравится вертикальный вариант.(так онлайн кажется больше, когда длинный список)
Добавил профессию:

Код
 <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>


Автор: Juzzver 9.11.2019, 6:31

Цитата
Спасибо, но мне больше нравится вертикальный вариант.(так онлайн кажется больше, когда длинный список)

Попробуй выводить никнейм по буквам в столбик, так еще больше получится.

Автор: ImProV1zator 9.11.2019, 9:12

Цитата(Juzzver @ 9.11.2019, 6:31) *

Попробуй выводить никнейм по буквам в столбик, так еще больше получится.

и аккаунт и айпи и дату регистрации

Автор: ImProV1zator 9.11.2019, 9:42

У меня вопрос, как сделать чтобы выводилось число общего онлайна?

Автор: Aimed 9.11.2019, 14:12

Цитата(Juzzver @ 9.11.2019, 4:31) *

Попробуй выводить никнейм по буквам в столбик, так еще больше получится.


и молотком по голове ещё постучать

Цитата(ImProV1zator @ 9.11.2019, 7:42) *

У меня вопрос, как сделать чтобы выводилось число общего онлайна?


https://lmgtfy.com/?q=sql+total+amount+of+rows&s=g

Автор: alfapvp 9.11.2019, 22:14

Я смотрю многие тут ка кфраера сидят на форуме.
как будто их не учил не кто.
зажравшиеся буржуи.
так впадлу лишний раз на кнопку тут нажать, написать ему правильные вещи.
что мл*ть вот смотри, трудно руку на клаву положить.
аймед тут самый умный видимо.

зажравшийся.
спустить на землю, сними розовые очки свои.
это форум чтобы подсказали.
а не ссылки твои вставлять на гугл.

Автор: Aimed 9.11.2019, 23:00

Цитата(alfapvp @ 9.11.2019, 20:14) *

Я смотрю многие тут ка кфраера сидят на форуме.
как будто их не учил не кто.
зажравшиеся буржуи.
так впадлу лишний раз на кнопку тут нажать, написать ему правильные вещи.
что мл*ть вот смотри, трудно руку на клаву положить.
аймед тут самый умный видимо.

зажравшийся.
спустить на землю, сними розовые очки свои.
это форум чтобы подсказали.
а не ссылки твои вставлять на гугл.



Я как раз и выступаю за то что б его научить мыслить и решать свои проблемы самостоятельно, вместо того что бы ему огрызки кода кидать, которые он где угодно сможет найти, втупую скопипастить и оно кое-как будет работать.
Ссылка в LMGTFY, с уже готовым поиском, как раз по вопросу который он задал. Это сделано, для того что бы показать насколько легко он сам мог найти ответ на свой вопрос.

П.С. Умнее тебя, это однозначно )))

Автор: ImProV1zator 10.11.2019, 2:51

Это как выбрать ячейки понятно

Код
SELECT COUNT(column_name)
FROM table_name
WHERE condition;


Не очень понятно как грамотно прописать where и echo, как вывести дальше?


Автор: ImProV1zator 10.11.2019, 3:10

Разобрался,всем спасибо

Код
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$sql="SELECT name FROM clients ORDER BY name";

if ($result=mysqli_query($con,$sql))
  {
  // Return the number of rows in result set
  $rowcount=mysqli_num_rows($result);
  printf("Result set has %d rows.\n",$rowcount);
  // Free result set
  mysqli_free_result($result);
  }
mysqli_close($con);
?>

Автор: Aimed 10.11.2019, 4:18

Цитата(ImProV1zator @ 10.11.2019, 1:10) *

Разобрался,всем спасибо
Код
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$sql="SELECT name FROM clients ORDER BY name";

if ($result=mysqli_query($con,$sql))
  {
  // Return the number of rows in result set
  $rowcount=mysqli_num_rows($result);
  printf("Result set has %d rows.\n",$rowcount);
  // Free result set
  mysqli_free_result($result);
  }
mysqli_close($con);
?>



У тебя там count() не используется.

Код
SELECT COUNT(name) FROM clients;

Тебе вернется результат с 1 записью и 1 столбцом - количество записей в таблице clients.

То что ты сделал будет тоже работать. Но нахрена все имена из таблицы тащить и потом через пхп их считать, если можно просто попросить базу посчитать.

Либо как вариант там где ты таблицу онлайн статуса делаешь, ты там все равно все записи уже тащишь. Просто их посчитай, не делай новый запрос в базу.

Цитата(ImProV1zator @ 10.11.2019, 0:51) *

Это как выбрать ячейки понятно
Код
SELECT COUNT(column_name)
FROM table_name
WHERE condition;


Не очень понятно как грамотно прописать where и echo, как вывести дальше?


WHERE не является обязательным.
Вот https://www.w3schools.com/Sql/func_mysql_count.asp конкретный пример есть и можно посмотреть как работает.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)