e1mer 102 Report post Posted April 14, 2016 (edited) Может кому пригодиться, кому надо допишет необходимый функционал для себя, в принципе этого скрипта должно хватить, чтоб понять "как там все устроено". Вперед! Скрипт отображает ник, профессию. <?php $host = "ХОСТ MSSQL"; $user = "Пользователь MSSQL"; $pass = "Пароль"; @mssql_connect($host, $user, $pass) or die("Ошибка: Невозможно найти хост: {$host}!"); $query = mssql_query("SELECT * FROM GameDB.dbo.character WHERE mem_addr > 1"); if (mssql_num_rows($query) > 0) { for ($i=1; $table = mssql_fetch_assoc($query); $i++) { $page .= "{$table['cha_name']}, {$table['job']} <br />"; } $hide = "Имя игрока, профессия, карта <br />{$page}"; } else { $hide = "Нет игроков в сети!"; } print_r($hide); ?> Edited April 14, 2016 by e1mer 1 Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted April 16, 2016 @e1mer 1) Вместо запроса SELECT * FROM GameDB.dbo.character WHERE mem_addr > 1 лучше использовать SELECT cha_name, job FROM GameDB.dbo.character WHERE mem_addr > 1 2) Можно добавить кеширование, чтобы часто не дергать базу данных Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
kiberhack 5 Report post Posted August 6, 2016 В 16.04.2016 в 11:34, V3ct0r сказал: @e1mer 1) Вместо запроса SELECT * FROM GameDB.dbo.character WHERE mem_addr > 1 лучше использовать SELECT cha_name, job FROM GameDB.dbo.character WHERE mem_addr > 1 2) Можно добавить кеширование, чтобы часто не дергать базу данных как сделать чтоб показывало кто из GM или HD онлайн? знаю что надо что то менять в запросе который идет к базе но не особо шарю в PHP, буду очень благодарен если подскажете, заренее спасибо. Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted August 7, 2016 Привет, @kiberhack! Тут кроме знания PHP нужно знать SQL - язык структурированных запросов. Чтобы вытащить GM-персонажей, которые онлайн, можно использовать такой запрос: SELECT c.cha_name FROM character AS c LEFT JOIN account AS a ON (a.act_id = c.act_id) WHERE c.mem_addr > 0 AND a.gm > 0 В связке с PHP это будет выглядеть например так: <?php // Данные для соединения с MSSQL-сервером $db_host = 'AMD'; $db_user = 'MDuser'; $db_pass = 'maindevru'; // Подключаемся к MSSQL-серверу... if (mssql_connect($db_host, $db_user, $db_pass) == false) { die('<b>Ошибка:</b> Невозможно подключиться к MSSQL-серверу!'); } // Выбираем базу данных GameDB if (mssql_select_db('GameDB') == false) { die('<b>Ошибка:</b> Не удалось открыть базу данных GameDB!'); } // Делаем SQL-запрос к базе данных $sql = 'SELECT c.cha_name FROM character AS c LEFT JOIN account AS a ON (a.act_id = c.act_id) WHERE c.mem_addr > 0 AND a.gm > 0'; $query = mssql_query($sql); if ($query == false) { die('<b>Ошибка:</b> Не удалось выполнить SQL-запрос на получение списка онлайн GM-персонажей!'); } // Формируем список персонажей $cha_online = array(); while ($cha = mssql_fetch_object($query)) { $cha_online[] = $cha->cha_name; } // Закрываем соединение с MSSQL-сервером (необязательно) mssql_close(); ?> <html> <head> <title>Список GM онлайн</title> </head> <body> <h1>Список GM онлайн</h1> <?php // Печатаем список персонажей foreach ($cha_online as $cha_name) { echo $cha_name . '<br />'; } ?> </body> </html> 2 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
kiberhack 5 Report post Posted August 7, 2016 1 час назад, V3ct0r сказал: Привет, @kiberhack! Тут кроме знания PHP нужно знать SQL - язык структурированных запросов. Чтобы вытащить GM-персонажей, которые онлайн, можно использовать такой запрос: SELECT c.cha_name FROM character AS c LEFT JOIN account AS a ON (a.act_id = c.act_id) WHERE c.mem_addr > 0 AND a.gm > 0 В связке с PHP это будет выглядеть например так: <?php // Данные для соединения с MSSQL-сервером $db_host = 'AMD'; $db_user = 'MDuser'; $db_pass = 'maindevru'; // Подключаемся к MSSQL-серверу... if (mssql_connect($db_host, $db_user, $db_pass) == false) { die('<b>Ошибка:</b> Невозможно подключиться к MSSQL-серверу!'); } // Выбираем базу данных GameDB if (mssql_select_db('GameDB') == false) { die('<b>Ошибка:</b> Не удалось открыть базу данных GameDB!'); } // Делаем SQL-запрос к базе данных $sql = 'SELECT c.cha_name FROM character AS c LEFT JOIN account AS a ON (a.act_id = c.act_id) WHERE c.mem_addr > 0 AND a.gm > 0'; $query = mssql_query($sql); if ($query == false) { die('<b>Ошибка:</b> Не удалось выполнить SQL-запрос на получение списка онлайн GM-персонажей!'); } // Формируем список персонажей $cha_online = array(); while ($cha = mssql_fetch_object($query)) { $cha_online[] = $cha->cha_name; } // Закрываем соединение с MSSQL-сервером (необязательно) mssql_close(); ?> <html> <head> <title>Список GM онлайн</title> </head> <body> <h1>Список GM онлайн</h1> <?php // Печатаем список персонажей foreach ($cha_online as $cha_name) { echo $cha_name . '<br />'; } ?> </body> </html> спасибо Quote Share this post Link to post Share on other sites
Chudik 12 Report post Posted August 25, 2016 Код у Макса в порядке, ничего лишнего, молодец! Но замечания Виктора, конструктивны. Нет смысла выдергивать из БД не нужную информацию. Quote По всем вопросам, обращайтесь [email protected] Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted August 26, 2016 12 часа назад, Chudik сказал: Код у Макса в порядке, ничего лишнего, молодец! Вот про что я тебе писал в соседней теме: @mssql_connect($host, $user, $pass) or die("Ошибка: Невозможно найти хост: {$host}!"); Я даже не узнаю в чем проблема, когда скрипт не будет работать (@ перед вызовом функции). Зато ничего лишнего! for ($i=1; $table = mssql_fetch_assoc($query); $i++) { $page .= "{$table['cha_name']}, {$table['job']} <br />"; } Здесь прекрасно подойдет цикл while. Тут не нужен счетчик. Тоже ничего лишнего. Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Chudik 12 Report post Posted August 26, 2016 7 часов назад, V3ct0r сказал: Я даже не узнаю в чем проблема, когда скрипт не будет работать (@ перед вызовом функции). Не правда. Ты увидишь "Ошибка: Невозможно найти хост: айпи сервера". Но не увидишь системных ошибок. Что в принципе, эстетично. А цикл и счетчик, это выбор каждого. Мелочь. Как ты мне и писал в соседней теме. Главное ведь - работает. Quote По всем вопросам, обращайтесь [email protected] Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted August 27, 2016 Цитата Не правда. Ты увидишь "Ошибка: Невозможно найти хост: айпи сервера". Но не увидишь системных ошибок. Что в принципе, эстетично. Что если я введу неверный пароль? Скрипт "найдет хост" и подключится, но MSSQL сервер вернет ошибку аутентификации. Так что "Ошибка: Невозможно найти хост: айпи сервера" ни о чем не говорит. Чтобы было эстетично, я отключу вывод системных ошибок на боевой машине в настройках PHP. Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Graf 210 Report post Posted May 1, 2019 Столкнулся с популярной проблемой. Вывод никнеймов персонажей показывает "?????" вместо русского ника. Полазал, поискал на сторонних форумах. Не помогло. Подскажите плиз) Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted May 1, 2019 2 minutes ago, Graf said: Столкнулся с популярной проблемой. Вывод никнеймов персонажей показывает "?????" вместо русского ника. Полазал, поискал на сторонних форумах. Не помогло. Подскажите плиз) On 8/23/2016 at 12:07 PM, V3ct0r said: @BotPRO, @kiberhack Как вариант можно заменить SQL-запрос на $sql = 'SELECT CONVERT (nvarchar(255), c.cha_name) COLLATE CYRILLIC_GENERAL_CI_AS AS cha_name, a.gm FROM character AS c LEFT JOIN account AS a ON (c.act_id = a.act_id) WHERE c.mem_addr > 0 AND a.gm > 0'; Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Graf 210 Report post Posted May 2, 2019 Оно не работает. Я тестировал) Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted May 2, 2019 17 hours ago, Graf said: Оно не работает. Я тестировал) Что конкретно не работает? Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Graf 210 Report post Posted May 3, 2019 7 часов назад, V3ct0r сказал: Что конкретно не работает? Я меняю SELECT cha_name, job FROM GameDB.dbo.character WHERE mem_addr > 1 На SELECT CONVERT (nvarchar(255), c.cha_name) COLLATE CYRILLIC_GENERAL_CI_AS AS cha_name, a.gm FROM character AS c LEFT JOIN account AS a ON (c.act_id = a.act_id) WHERE c.mem_addr > 0 AND a.gm > 0 И русские символы не отображаются Quote Share this post Link to post Share on other sites
e1mer 102 Report post Posted May 3, 2019 7 часов назад, Graf сказал: Я меняю SELECT cha_name, job FROM GameDB.dbo.character WHERE mem_addr > 1 На SELECT CONVERT (nvarchar(255), c.cha_name) COLLATE CYRILLIC_GENERAL_CI_AS AS cha_name, a.gm FROM character AS c LEFT JOIN account AS a ON (c.act_id = a.act_id) WHERE c.mem_addr > 0 AND a.gm > 0 И русские символы не отображаются Кодировку исполняемого файла смени. Quote Share this post Link to post Share on other sites