[ styl3r @ 13.01.2014. 18:35 ] @
I pozdrav ljudi,
Radim game cron da svakih 5 minuta pokrene fajl i uzme podatke sa svih servera koji su dodani... E sada ja uzmem ip adrese ubacim ih u array znaci to bude ovako:

Code:

$array = Array ( [0] => ip, [1] => ip.... );


E sada ja izbrojim koliko ima servera ( dodani su pod string $cssserverscountis ) i postavim provjeru:

Code:

for($i = 0; $i < $cssserverscountis; $i++) {
           $serverexplodee = explode(":", $array[$i]);

    $serverIP = $serverexplodee[0];
    $serverPort = $serverexplodee[1];

        define( 'SQ_SERVER_ADDR', $serverIP );
        define( 'SQ_SERVER_PORT', $serverPort );
        define( 'SQ_TIMEOUT',     1 );
        define( 'SQ_ENGINE',      SourceQuery :: SOURCE );

        $Timer = MicroTime( true );

        $Query = new SourceQuery( );
        
        $Info    = Array( );
        $Rules   = Array( );
        $Players = Array( );
        
        try
        {
            $Query->Connect( SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE );
            
            $Info    = $Query->GetInfo( );
            $Players = $Query->GetPlayers( );
            $Rules   = $Query->GetRules( );
        }
        catch( Exception $e )
        {

            // - ako je offline uzimace podatke koji su zabiljezeni kada je bio online ( i ako je off vise od 15 dana ukinuce se  to trebam dodati ali prvo ovo uraditi)

            $ipserveracj = $ipservera;
            $servernamecj = $servername;
            $servermodcj = $servermod;
            $playerscj = $players;
            $maxplayerscj = $maxplayers;
            $botscj = $bots;
            $mapcj = $map;
            $infoplayerscj = "";
            $arraycj = $infoplayerscj;
        }

        $Query->Disconnect( );
        
        $Timer = Number_Format( MicroTime( true ) - $Timer, 4, '.', '' );

        if($Info["ModDir"] != 'cstrike'){

            // - Ako bude bud neki pa ucita neki drugi server koji nije cs:s

            $ipserveracj = $ipservera;
            $servernamecj = $servername;
            $servermodcj = $servermod;
            $playerscj = $players;
            $maxplayerscj = $maxplayers;
            $botscj = $bots;
            $mapcj = $map;
            $infoplayerscj = "";
            $arraycj = $infoplayerscj;

        }else{

            // - ako je sve u redu onda uzme podatke sa servera

            $ipserveracj = $ipservera;
            $servernamecj = mysql_real_escape_string(htmlentities($Info["HostName"]));
            $servermodcj = $servermod;
            $playerscj = $Info["Players"];
            $maxplayerscj = $Info["MaxPlayers"];
            $botscj = $Info["Bots"];
            $mapcj = $Info["Map"];
            $infoplayerscj = mysql_real_escape_string(json_encode($Players));
            $arraycj = $infoplayerscj;

        }

        echo $ipserveracj . "<br />";
        echo $servernamecj . "<br />";
        echo $servermodcj . "<br />";
        echo $playerscj . "<br />";
        echo $maxplayerscj . "<br />";
        echo $botscj . "<br />";
        echo $mapcj . "<br />";
        print_r($arraycj);
}


E i sada umjesto da foreach ide redom i uzme svaki ip on postavi uvijek isti server i sada npr ako je trebalo da uzme podatke sa 8 istih servera on ce postaviti 8 puta isti server i ne razumijem u cemu je greska.... Evo puni kod:

Code:

<?php

mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db("spg") or die(mysql_error());

$cssserverscount = mysql_query("SELECT COUNT(id) AS numbers FROM igrice WHERE game_id = '2'") or die(mysql_error());
$cssserversrows = mysql_fetch_assoc($cssserverscount);
$cssserverscountis = $cssserversrows['numbers'];

$cssservers = mysql_query("SELECT * FROM igrice WHERE game_id = '2'") or die(mysql_error());
while($servers = mysql_fetch_assoc($cssservers)){
    $ipservera[] = $servers['ip'];
    $servermod = $servers['servermod'];
    $servername = $servers['imeservera'];
    $maxplayers = $servers['maxplayers'];
    $bots = "0";
    $players = "0";
    $map = $servers['servermap'];

}

$array = $ipservera;

for($i = 0; $i < $cssserverscountis; $i++) {

    $serverexplodee = explode(":", $array[$i]);

    $serverIP = $serverexplodee[0];
    $serverPort = $serverexplodee[1];

        define( 'SQ_SERVER_ADDR', $serverIP );
        define( 'SQ_SERVER_PORT', $serverPort );
        define( 'SQ_TIMEOUT',     1 );
        define( 'SQ_ENGINE',      SourceQuery :: SOURCE );

        $Timer = MicroTime( true );

        $Query = new SourceQuery( );
        
        $Info    = Array( );
        $Rules   = Array( );
        $Players = Array( );
        
        try
        {
            $Query->Connect( SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE );
            
            $Info    = $Query->GetInfo( );
            $Players = $Query->GetPlayers( );
            $Rules   = $Query->GetRules( );
        }
        catch( Exception $e )
        {

            // - ako je offline uzimace podatke koji su zabiljezeni kada je bio online ( i ako je off vise od 15 dana ukinuce se  to trebam dodati ali prvo ovo uraditi)

            $ipserveracj = $ipservera;
            $servernamecj = $servername;
            $servermodcj = $servermod;
            $playerscj = $players;
            $maxplayerscj = $maxplayers;
            $botscj = $bots;
            $mapcj = $map;
            $infoplayerscj = "";
            $arraycj = $infoplayerscj;
        }

        $Query->Disconnect( );
        
        $Timer = Number_Format( MicroTime( true ) - $Timer, 4, '.', '' );

        if($Info["ModDir"] != 'cstrike'){

            // - Ako bude bud neki pa ucita neki drugi server koji nije cs:s

            $ipserveracj = $ipservera;
            $servernamecj = $servername;
            $servermodcj = $servermod;
            $playerscj = $players;
            $maxplayerscj = $maxplayers;
            $botscj = $bots;
            $mapcj = $map;
            $infoplayerscj = "";
            $arraycj = $infoplayerscj;

        }else{

            // - ako je sve u redu onda uzme podatke sa servera

            $ipserveracj = $ipservera;
            $servernamecj = mysql_real_escape_string(htmlentities($Info["HostName"]));
            $servermodcj = $servermod;
            $playerscj = $Info["Players"];
            $maxplayerscj = $Info["MaxPlayers"];
            $botscj = $Info["Bots"];
            $mapcj = $Info["Map"];
            $infoplayerscj = mysql_real_escape_string(json_encode($Players));
            $arraycj = $infoplayerscj;

        }

        echo $ipserveracj . "<br />";
        echo $servernamecj . "<br />";
        echo $servermodcj . "<br />";
        echo $playerscj . "<br />";
        echo $maxplayerscj . "<br />";
        echo $botscj . "<br />";
        echo $mapcj . "<br />";
        print_r($arraycj);

}

?>


Hvala puno svakome ko pomogne.


[ Tpojka @ 13.01.2014. 20:41 ] @
Nema sanse da foreach() ne radi, dobro postavljena.
Dakle ako imas vec niz, trebao bi foreach postaviti kao vanjsku petlju. Tj petlju koja ce obuhvatiti sve elemente niza.
A potom u unutrasnjoj petlji radi funkcije sa stringovima elementa i ostalim funkcijama bitnim za obradu pojedinacnog elementa niza
Code (php):

$ips=('a', 'b', 'c', 'd');
if (is_array($ips))
{
  foreach ($ips as $k => $v)
  {
    // do what you need
    // output too
  }
}
 
[ styl3r @ 14.01.2014. 07:56 ] @
Sve ja to znam, evo vidis kod i sa foreach:

Code:

<?php

$cssservers = mysql_query("SELECT * FROM igrice WHERE game_id = '2'") or die(mysql_error());
while($servers = mysql_fetch_assoc($cssservers)){
    $ipservera[] = $servers['ip'];
    $servermod = $servers['servermod'];
    $servername = $servers['imeservera'];
    $maxplayers = $servers['maxplayers'];
    $bots = "0";
    $players = "0";
    $map = $servers['servermap'];

}

$array = $ipservera;

if(is_array($array)){
    foreach ($array as $id => $servers) {
        $serverexplodee = explode(":", $servers);

        $serverIP = $serverexplodee[0];
        $serverPort = $serverexplodee[1];

            define( 'SQ_SERVER_ADDR', $serverIP );
            define( 'SQ_SERVER_PORT', $serverPort );
            define( 'SQ_TIMEOUT',     1 );
            define( 'SQ_ENGINE',      SourceQuery :: SOURCE );

            $Timer = MicroTime( true );

            $Query = new SourceQuery( );
            
            $Info    = Array( );
            $Rules   = Array( );
            $Players = Array( );
            
            try
            {
                $Query->Connect( SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE );
                
                $Info    = $Query->GetInfo( );
                $Players = $Query->GetPlayers( );
                $Rules   = $Query->GetRules( );
            }
            catch( Exception $e )
            {

                // - ako je offline uzimace podatke koji su zabiljezeni kada je bio online ( i ako je off vise od 15 dana ukinuce se  to trebam dodati ali prvo ovo uraditi)

                $ipserveracj = $ipservera;
                $servernamecj = $servername;
                $servermodcj = $servermod;
                $playerscj = $players;
                $maxplayerscj = $maxplayers;
                $botscj = $bots;
                $mapcj = $map;
                $infoplayerscj = "";
                $arraycj = $infoplayerscj;
            }

            $Query->Disconnect( );
            
            $Timer = Number_Format( MicroTime( true ) - $Timer, 4, '.', '' );

            if($Info["ModDir"] != 'cstrike'){

                // - Ako bude nesto pa ucita neki drugi server koji nije cs:s

                $ipserveracj = $ipservera;
                $servernamecj = $servername;
                $servermodcj = $servermod;
                $playerscj = $players;
                $maxplayerscj = $maxplayers;
                $botscj = $bots;
                $mapcj = $map;
                $infoplayerscj = "";
                $arraycj = $infoplayerscj;

            }else{

                // - ako je sve u redu onda uzme podatke sa servera

                $ipserveracj = $ipservera;
                $servernamecj = mysql_real_escape_string(htmlentities($Info["HostName"]));
                $servermodcj = $servermod;
                $playerscj = $Info["Players"];
                $maxplayerscj = $Info["MaxPlayers"];
                $botscj = $Info["Bots"];
                $mapcj = $Info["Map"];
                $infoplayerscj = mysql_real_escape_string(json_encode($Players));
                $arraycj = $infoplayerscj;

            }

            echo $ipserveracj . "<br />";
            echo $servernamecj . "<br />";
            echo $servermodcj . "<br />";
            echo $playerscj . "<br />";
            echo $maxplayerscj . "<br />";
            echo $botscj . "<br />";
            echo $mapcj . "<br />";
            print_r($arraycj);

        //$ubacipodatkenove = mysql_query("UPDATE igrice SET ip='$value', imeservera='$servernamecj', servermod='$servermodcj', igraci='$playerscj', maxplayers='$maxplayerscj', bots='$botscj', servermap='$mapcj', infoplayers='$arraycj' WHERE game_id='2' AND ip='$value'") or die(mysql_error());

    }
}


?>


Da ti kazem ne znam zasto nece, ovo bi trebalo raditi ali nesto uvek ponovi iste servere... De mi na pm posalji tvoj fb da te dodam pa da vidimo preko teamviuwera to sve...
[ 357_97 @ 14.01.2014. 09:12 ] @
Nemožeš da promeniš vrednost konstante što ti upravo radiš u petlji!
Code:
error_reporting(E_ALL);
ini_set('display_errors', '1');

define('SOMETHING', 'first');
echo SOMETHING;
define('SOMETHING', 'second');
echo SOMETHING;

# first
# Notice: Constant SOMETHING already defined in file on line XYZ
# first
[ styl3r @ 14.01.2014. 09:23 ] @
@357_97

Pa kako onda da rijesim ja moram da uzmem podatke sa svih servera... Sta da uradim
[ 357_97 @ 14.01.2014. 09:45 ] @
Koristi običnu promenljivu umesto konstanti (define).
Code:
$sq_server_addr='something'
[ styl3r @ 14.01.2014. 09:55 ] @
E da je to sada tako lako uraditi... Ovo je citav query za uzimanje podataka nije to samo ovo a ove define pokrecu tamo sve one funkcije i ako promjenim ja na obicne promjenjive onda nece raditi to... Poslao sam ti mail de odgovori...
[ VladaSu @ 14.01.2014. 10:37 ] @
Moras da napravis da radi sa obicnim promenljivima. Menjaj db klasu ili nesto drugo. Ne valja pristup problemu.
Define sluzi za definisanje konstanti a konstanta se zove konstanta jer ne moze da se menja.
Ako bas treba da radi sa konstantama jer nemas prava da radis na drugim fajlovima onda mozes da redefinises konstante ako imas na serveru instaliran runkit.
[ styl3r @ 14.01.2014. 12:17 ] @
Gotov, sredjeno sve umjesto konstanti stavio sam varijable malo sam morao mjenjati i ostale fajlove...

@357_97
Tvoj komentar mi je pomogao najvise sto si mi rekao da se konstante ne mogu ponavljati HVALA PUNO!!!

Hvala i ostalima na komentarima

Moze LOCK!