• Хостинг игровых серверов

    Максимальная производительность для ваших игровых серверов!

    Заказать сейчас

Помогите Запись в БД(Легко)

Holika1000

13 Апр 2018
16
0
0
..........................................................................................................................................................
В общем мудрил и мудрил и нифига не получилось, суть такова:

Есть БД `TEST` в ней таблица `online` в таблице 2 строки `onl` `sleep`

В итоге надо чтоб плагин записывал показания сервера в эти строки(колонки)

onl - Онлайн игроков
sleep - Спящие игроки
..........................................................................................................................................................




..........................................................................................................................................................
Есть БД `TEST` в ней таблица `online` в таблице 1 строка `stat`

В итоге надо чтоб плагин записывал показания сервера в эту строку(колонку)

stat - Статус сервера(Онлайн или нет)

Если онлайн то запись ONLINE
Если сервер выключен, то OFFLINE





Вроде ничего сложного нету, я не силен в программировании плагинов,

Вот код PHP^
PHP:
<?php
  $host = '12312312313';  // Хост, у нас все локально
  $user = '123123213';    // Имя созданного вами пользователя
  $pass = '1231233'; // Установленный вами пароль пользователю
  $db_name = 'test';   // Имя базы данных
  $link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой

  // Ругаемся, если соединение установить не удалось
  if (!$link) {
    echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
    exit;
  }
?>



<?php
  $sql = mysqli_query($link, 'SELECT `onl` FROM `online`');
  while ($result = mysqli_fetch_array($sql)) {
    echo 'Онлайн игроков:&nbsp' . "{$result['onl']}";
  }
    $sql = mysqli_query($link, 'SELECT `sleep` FROM `online`');
  while ($result = mysqli_fetch_array($sql)) {
    echo '&nbsp&nbsp&nbspИгроков спящих:&nbsp' . "{$result['sleep']}";
  }
?>


Очень жду помощи, уже пальцы болят печатать)
 
Решение
Мдэ. Сурс квери... Вообще использование php для таких целей - гиблое дело. Было бы удобнее использовать websockets js.
Ну раз мы уже "пыхаемся", то лови. Все очень просто. Вот либа, подключаешь еще к нужному проекту, и используешь. Никаких udp и прочих изьебонов. Вот пример:
З.Ы. во всем нижеприведенном коде могут быть баги, ибо писал примеры прямо здесь, но баги незначительные, самое главное что логика работы показана и ясна. Немного подумать и будешь спутники пиллинговать

Вот это работа с websockets (RCon):
Код:
<?php
require_once "lib/Client.php";

class Connector
{
    private $Client;
   
    public function Boot(string $connString) : bool
    {
        $this->Client = new Client($connString);
       
        if(!$this->Client)...
Если онлайн то запись ONLINE
Если сервер выключен, то OFFLINE
Используй другой тип данных для записи сервера онлайн или нет, например TINYINT. Если онлайн 1, если нет 0.
Для начала нужно сначала получить эти данные от сервера. Как ты их получаешь, я не знаю. Можешь рассказать, я тебе помогу.
Вот простой пример записи данных в таблицу.
Код:
<?php
$online = $_POST['online'];
$sleep = $_POST['sleep'];
$sql = mysqli_query($link, "INSERT INTO online (onl, sleep) VALUES ($online, $sleep)");
?>

UPD:
СТОП! А зачем тебе в БД хранить статус сервера? Для каких тебе целей его записывать в БД? Возможно я могу предложить тебе более простое решение. И зачем хранить данные о количестве игроков в БД?
 
  • Мне нравится
Реакции: Bolotnii_Doktor
MrFallen, еще если не ошибаюсь, то на форум уже какой-то чел заливал одностраничный мониторинг) Возможно это нужно автору)

А можно ссылку?
[automerge]1547072528[/automerge]
Используй другой тип данных для записи сервера онлайн или нет, например TINYINT. Если онлайн 1, если нет 0.
Для начала нужно сначала получить эти данные от сервера. Как ты их получаешь, я не знаю. Можешь рассказать, я тебе помогу.
Вот простой пример записи данных в таблицу.
Код:
<?php
$online = $_POST['online'];
$sleep = $_POST['sleep'];
$sql = mysqli_query($link, "INSERT INTO online (onl, sleep) VALUES ($online, $sleep)");
?>

UPD:
СТОП! А зачем тебе в БД хранить статус сервера? Для каких тебе целей его записывать в БД? Возможно я могу предложить тебе более простое решение. И зачем хранить данные о количестве игроков в БД?


Ну чтоб сервер записывал показания в БД, а сайт с БД брал информацию
 
Изъебы. Почему бы и не использовать rcon ? Опрашиваешь сервер, фильтруешь данные, записываешь и обновляешь во вьюшках
Можно и так, я просто жду помощи и вариантов разумных.
Сервер уточню 133 DevBlog
[automerge]1547074953[/automerge]
Используй другой тип данных для записи сервера онлайн или нет, например TINYINT. Если онлайн 1, если нет 0.
Для начала нужно сначала получить эти данные от сервера. Как ты их получаешь, я не знаю. Можешь рассказать, я тебе помогу.
Вот простой пример записи данных в таблицу.
Код:
<?php
$online = $_POST['online'];
$sleep = $_POST['sleep'];
$sql = mysqli_query($link, "INSERT INTO online (onl, sleep) VALUES ($online, $sleep)");
?>

UPD:
СТОП! А зачем тебе в БД хранить статус сервера? Для каких тебе целей его записывать в БД? Возможно я могу предложить тебе более простое решение. И зачем хранить данные о количестве игроков в БД?
На 133devblog оксид не воспринимает mysql. Или .dll косячные или на самом деле нет поддержки
 
Можно и так, я просто жду помощи и вариантов разумных.
Сервер уточню 133 DevBlog
[automerge]1547074953[/automerge]

На 133devblog оксид не воспринимает mysql. Или .dll косячные или на самом деле нет поддержки
Если ты поподробнее опишешь свою идею, то я смогу помочь подобрать инструменты
 
А можно ссылку?
[automerge]1547072528[/automerge]



Ну чтоб сервер записывал показания в БД, а сайт с БД брал информацию
Для этого тебе не нужна база данных. Можно брать актуальную информацию и сразу её показывать пользователям.
 
  • Мне нравится
Реакции: Holika1000
Последнее редактирование:
Вместо этих
PHP:
query_source("90.188.22.244:12881");
query_source("185.97.255.18:20000");
query_source("46.174.53.160:27015");
query_source("95.183.13.42:27015");
query_source("83.137.50.124:27015");
query_source("213.238.173.151:27015");
query_source("46.174.53.132:11111");
 
Мдэ. Сурс квери... Вообще использование php для таких целей - гиблое дело. Было бы удобнее использовать websockets js.
Ну раз мы уже "пыхаемся", то лови. Все очень просто. Вот либа, подключаешь еще к нужному проекту, и используешь. Никаких udp и прочих изьебонов. Вот пример:
З.Ы. во всем нижеприведенном коде могут быть баги, ибо писал примеры прямо здесь, но баги незначительные, самое главное что логика работы показана и ясна. Немного подумать и будешь спутники пиллинговать

Вот это работа с websockets (RCon):
Код:
<?php
require_once "lib/Client.php";

class Connector
{
    private $Client;
   
    public function Boot(string $connString) : bool
    {
        $this->Client = new Client($connString);
       
        if(!$this->Client) return false;
        else return true;
    }
   
    public function Send(string $string) : string
    {
        $this->Client->send($string);
       
        $decoded = json_decode($this->Client->receive());
       
        return $decoded->Message;
    }
}

А вот это максимальнейше симпловый пример для работы с БД:

Код:
<?php
   
class DatabaseManager
{
    private $Connection;
   
    private $user = "";
    private $pass = "";
    private $database = "";
    private $defCharset = "utf8";
    private $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
   
    public function __construct()
    {
        try
        {
            $this->Connection = new PDO("mysql:host=$this->host;dbname=$this->db;charset=$this->charset", $this->user, $this->pass, $this->opt);
        }
        catch(PDOException $ex)
        {
            die("Connection failed! Msg: " . $ex->getMessage());
        }
    }
   
    public function IsConnected() : bool
    {
        return $this->Connection != null ? true : false;
    }
   
    public function WithStmt(string $rawQuery)
    {
        if(IsConnected())
        {
            return $this->Connection->query($rawQuery);
        }
       
        return null;
    }
   
    public function Raw(string $raw)
    {
        if(IsConnected())
        {
            $this->Connection->query($raw);
        }
    }
   
    /*
    * Use as:
    * foreach($dbManager->WithParams("SELECT * FROM client WHERE ip = ?", [
    * '127.0.0.1'
    * ]) as $row)
    * {
    *     echo $row + "\n";
    * }
    */
    public function WithParams(string $raw, array $params)
    {
        if(IsConnected())
        {
            $this->Connection->prepare($raw);
           
            return $this->Connection->execute($params);
        }
       
        return null;
    }
}
 

Вложения

  • lib.rar
    5.8 KB · Просмотры: 4
  • Мне нравится
Реакции: Holika1000
Мдэ. Сурс квери... Вообще использование php для таких целей - гиблое дело. Было бы удобнее использовать websockets js.
Ну раз мы уже "пыхаемся", то лови. Все очень просто. Вот либа, подключаешь еще к нужному проекту, и используешь. Никаких udp и прочих изьебонов. Вот пример:
З.Ы. во всем нижеприведенном коде могут быть баги, ибо писал примеры прямо здесь, но баги незначительные, самое главное что логика работы показана и ясна. Немного подумать и будешь спутники пиллинговать

Вот это работа с websockets (RCon):
Код:
<?php
require_once "lib/Client.php";

class Connector
{
    private $Client;
  
    public function Boot(string $connString) : bool
    {
        $this->Client = new Client($connString);
      
        if(!$this->Client) return false;
        else return true;
    }
  
    public function Send(string $string) : string
    {
        $this->Client->send($string);
      
        $decoded = json_decode($this->Client->receive());
      
        return $decoded->Message;
    }
}

А вот это максимальнейше симпловый пример для работы с БД:

Код:
<?php
  
class DatabaseManager
{
    private $Connection;
  
    private $user = "";
    private $pass = "";
    private $database = "";
    private $defCharset = "utf8";
    private $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
  
    public function __construct()
    {
        try
        {
            $this->Connection = new PDO("mysql:host=$this->host;dbname=$this->db;charset=$this->charset", $this->user, $this->pass, $this->opt);
        }
        catch(PDOException $ex)
        {
            die("Connection failed! Msg: " . $ex->getMessage());
        }
    }
  
    public function IsConnected() : bool
    {
        return $this->Connection != null ? true : false;
    }
  
    public function WithStmt(string $rawQuery)
    {
        if(IsConnected())
        {
            return $this->Connection->query($rawQuery);
        }
      
        return null;
    }
  
    public function Raw(string $raw)
    {
        if(IsConnected())
        {
            $this->Connection->query($raw);
        }
    }
  
    /*
    * Use as:
    * foreach($dbManager->WithParams("SELECT * FROM client WHERE ip = ?", [
    * '127.0.0.1'
    * ]) as $row)
    * {
    *     echo $row + "\n";
    * }
    */
    public function WithParams(string $raw, array $params)
    {
        if(IsConnected())
        {
            $this->Connection->prepare($raw);
          
            return $this->Connection->execute($params);
        }
      
        return null;
    }
}
Спасибо, пример понятен, тему можно закрывать
 
Активность
Пока никто не печатает сообщение