Vyřešeno SKRIPT

Status
Zamknuto

info65

Elita
Zpráv
436
Bodů
267
Servery
ms4.hicoria.com:25460
Ahoj, chtěl bych se zeptat, jestli mi někdo pomůžeš s jednou věcičkou.
Mám server a potřeboval bych, aby se mi (např. php script) napojit na databázi do dané tabulky a z daných sloupců "name" a "amout" vykonal na server příkaz jako
"/eco give <name> <amout>" Měl jsem starý system na coiny a potřebuju to dat lidem do essentials.
 

Hydroy

Destroys.eu
Zpráv
100
Bodů
122
Místo
Senec
Servery
ts3.Destroys.eu
mc.Destroys.eu
Dobrý deň, nerozumiem tvojmu problému, ty chceš na web akoby statistiky na coiny/money?
 

Whitehouse

ZombieApocalypse.eu
Administrator
Minecraft sekce
Zpráv
1 790
Bodů
1 173
Místo
Praha
Servery
mc.zombieapocalypse.eu
Dobrý večer, Minecraft server máte jako normální službu (ne na VPS), že? Pošlete sem strukturu databáze (nejlépe nějaký select tabulky, kterou potřebujete zpracovat).
 

dably

Stará garda
Zpráv
426
Bodů
451
Servery
vps.dably.cz
play.nuclearstorm.cz
ts3.nuclearstorm.cz
S tím ti můžu pomoct, dá se to udělat různě ale nejefektivnější mi přišel jeden plugin, tuším že se jmenuje websend, osobně jsem ho používal. Napiš mi PM domluvíme detaily.
 

GamerSK

Veterán
Zpráv
38
Bodů
147
Ak by som vedel lepšie programovať v jave tak by som ti to napísal. Ak niekoho poznáš tak mu napíš tento postup.
Select riadkov z tabuľky.
Cyklus naviazaný na počet riadkov.
Vykonanie príkazu v cykly. napr. /eco give row['name'] row['amout']
Vymazanie riadku z databázy.
Ukončenie cyklu.

Pre lepšie fungovanie by tam mohol pridať setInterval napr na hodinu. Týmto zabezpečí kontrolovanie databázy každú hodinu.

Dúfam, že som aspoň trochu pomohol.
 

Whitehouse

ZombieApocalypse.eu
Administrator
Minecraft sekce
Zpráv
1 790
Bodů
1 173
Místo
Praha
Servery
mc.zombieapocalypse.eu
Dobrý den, pokud to chápu správně, @info65 potřebuje jednorázovou konverzi z databáze někam jinam. Jako nejjednodušší jednorázové řešení mi přijde nepoužívat žádný plugin, ale jednoduchý PHP skript. Tento PHP skript by přečetl tabulku a vygeneroval by příkazy, které by server vykonal například za pomoci pluginu Skript. Pro představu by to mohlo vypadat takto (toto by vygeneroval PHP skript z databáze):
919
Tento PHP skript jsem po úpravě mého staršího skriptu napsal takhle:
PHP:
<?php
 // KONFIGURACE
$mysql = array( // údaje k MySQL
  "hostname" => "mysql.hicoria.com",
  "username" => "mysql_XXXX",
  "password" => "HESLO",
  "database" => "mysql_XXXX",
  "table" => "TABULKA"
);

 // DO TOHO UŽ NEZASAHOVAT

$nahrazovani = null;

$sloupce = array( // sloupce k vypsání
  "name" => "Nick",
  "tokens" => "Peníze"
);

$razeni = array("name", "ASC");
if(!isset($_GET["p"])) $p = 1;
else $p = (int)$_GET["p"];
$db = new Database($mysql);
if($db->connected)
  $db->printRows($sloupce, -1, $p, $razeni, $nahrazovani);
else die("Chyba");


class Database {
  private $pdo;
  private $table;
  public $connected = false;

  public function __construct($mysql){
    $this->table = $mysql["table"];
    $dsn = "mysql:dbname=$mysql[database];host=$mysql[hostname]";
    try{
      $this->pdo = new PDO($dsn, $mysql["username"], $mysql["password"]);
      $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $this->connected = true;
    }catch(PDOException $e) {
      echo("Spojení selhalo: ".$e->getMessage());
      $this->connected = false;
    }
  }

  public function printRows($rows, $itemsOnPage=20, $page=1, $order=false, $replacement=false){
    $limit = $itemsOnPage;
    $offset = ($page-1)*$itemsOnPage;
    $rowsKeys = array();
    $rowsNames = array();
    foreach($rows as $k => $v){
      $rowsKeys[] = $k;
      $rowsValues[] = $v;
    }
    $ordersql = "";
    if(is_array($order)){
      $ordersql = " ORDER BY `$order[0]` $order[1]";
    }
    $limitsql = "";
    if($limit > 0){
      $limitsql = " LIMIT ".$limit." OFFSET ".$offset;
    }
    $sql = "SELECT SQL_CALC_FOUND_ROWS ".implode(",", $rowsKeys)." FROM ".$this->table.$ordersql.$limitsql;
    if(is_array($replacement)){
      $sql = "SELECT SQL_CALC_FOUND_ROWS ".implode(",", $rowsKeys)." FROM ".$this->table." a JOIN ".$replacement["table_2"]." b ON (".$replacement["on"].")".$ordersql.$limitsql;
      foreach($rowsKeys as &$key){
        $key = substr($key, strpos($key, ".")+1);
      }

/*SELECT a.*,b.balance
FROM `cc3_account` a JOIN `cc3_balance` b
ON (a.id = b.username_id)
ORDER BY a.id ASC
LIMIT 50*/


    }
    $result = $this->pdo->query($sql);
    $numrows = $this->pdo->query("SELECT FOUND_ROWS();");
    $gotRows = $result->fetchAll();
    $num = $numrows->fetch();
    $count = $num[0];
    $pageCount = ceil($count/$itemsOnPage);
    echo("<pre style=\"width:800px;height:600px;border:1px solid black\">");
    echo("command /mysql_import:".PHP_EOL);
    echo(" executable by: console".PHP_EOL);
    echo(" trigger:".PHP_EOL);
    $i = 0;
    $c = count($gotRows);
    foreach($gotRows as $oneRow) { //kazdy zaznam
      $i++;
      echo("  execute console command \"eco give ");
      //echo(implode(" ",$oneRow));
      foreach($rowsKeys as $k => $rv){
        echo(htmlentities($oneRow[$rv]));
        if($k==0) echo " ";
      }
      echo("\"".PHP_EOL);
      if($i%50 == 0){ // kazdych N zaznamu cekat
        echo("  wait 10 ticks".PHP_EOL);
        echo("  send \"Pokracuji v konverzi (hotovo $i/$c)\" to console".PHP_EOL);
      }
    }
    /*echo("<a href=\"?p=1\">&lt;&lt; První strana</a> ");
    if($page>1) echo("<a href=\"?p=".($page-1)."\">&lt; Předchozí strana</a> ");
    echo(" Strana ".htmlentities($page)." ");
    if($page<$pageCount) echo(" <a href=\"?p=".($page+1)."\">Další strana &gt;</a>");
    echo("<a href=\"?p=".$pageCount."\">Poslední strana &gt;&gt;</a> ");*/
  }

  public function __destruct(){
    $this->pdo = null;
  }

}
Vyplňte tedy MySQL údaje a PHP skript hoďte někam na Hicorii webhosting (buď webhosting k mc serveru, nebo na VPS). Po načtení by se Vám měl vygenerovat kód, který uložte třeba jako /plugins/Skript/scripts/mysqlimport.sk, načtěte ho a z konzole vykonejte příkaz mysql_import, popřípadě kontrolujte průběh v konzoli.
 
Status
Zamknuto
Top