Naučit se PHP Naučit se PHP
Pouze tento týden až 80 % sleva na vývoj webů v PHP.
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Diskuze: Problem s while a Quary

PHP PHP Problem s while a Quary American English version English version

Aktivity (1)
Avatar
Kristián Partl:25.9.2018 20:55

Dobrý deň mám taký problém s while a Quary keď vypnem server z ktorého číta údaje tak použije údaje zo servera nad ním.
Kód

<?php
$sql_server_list = "SELECT sid, ip, port, rcon, modid, hostname FROM sb_servers WHERE enabled='1' ORDER BY sb_servers.sid ASC";
$r_server_list = $banlist_connect->query($sql_server_list);

require __DIR__ . '/config/server-query/SourceQuery/bootstrap.php';
use xPaw\SourceQuery\SourceQuery;

$Query = new SourceQuery( );
?>
 <?php while($row_server_list = $r_server_list->fetch_assoc()){ ?>
 <?php
 $server_adress = $row_server_list["ip"];
$server_port   = $row_server_list["port"];
$server_rcon   = $row_server_list["rcon"];
$server_modid  = $row_server_list["modid"];
$server_motd   = $row_server_list["hostname"];


$server_ip = $server_adress.":".$server_port;
$server_ip = strtoupper($server_ip);

$green  = "green";
$red    = "red";

try {
        $Query->Connect( $server_adress, $server_port );

        $server_info = $Query->GetInfo( );
} catch( Exception $e ) { } finally{ $Query->Disconnect( ); }

 if(empty( $server_info)){

        $server_status = 0;
        $server_map = "Unknown";
    $server_now = "0";
    $server_max = '0';

 } else {

foreach( $server_info  as $InfoKey => $InfoValue ):
 if ($InfoKey == "Map") { $server_map = $InfoValue; $server_status = 1;
} elseif ($InfoKey == "MaxPlayers") { $server_max = $InfoValue;
 } elseif ($InfoKey == "Players") { $server_now = $InfoValue;}
endforeach;
};

 if($server_status==1){$server_status=$green;} elseif($server_status!=1){$server_status = $red;};

$server_online_per =  $server_now / $server_max * 100;

?>

Obrazok:
https://i.imgur.com/JcBNRtn.png

Webstránka:
http://kristian.games-town.eu/
Jedná sa o serverlist.

Zdrojový kod celej tabulky:

<div class="col-12">
                        <div class="card">
                          <div class="table-responsive">

                            <table class="table card-table table-vcenter text-nowrap">
                              <thead>
                                <tr>
                                  <th ><button class="btn btn-secondary btn-sm" onclick="reload()"><i class="fe fe-refresh-cw"></i></button></th>
                                  <th>Server</th>
                                  <th class="text-center">IP Adress</th>
                                  <th class="text-center">MAP</th>
                                  <th class="text-center">PLAYERS</th>
                                  <th></th>
                                </tr>
                              </thead>
                              <tbody>


                             <tr>
                                  <td class="text-center">
                                    <div class="avatar d-block" style="background-image: url(https://i.imgur.com/CZwJHfE.png)">
                                      <span class="avatar-status bg-green"></span>
                                    </div>
                                  </td>
                                  <td>
                                    <div>Official Games-Town Server</div>
                                    <div class="small text-muted">
                                      Teamspeak 3
                                    </div>
                                  </td>
                                  <td class="text-center">
                                    <input type="text" maxlength="100" class="form-control text-center" value="TS3.GAMES-TOWN.EU" id="TS3.GAMES-TOWN.EU" readonly>
                                  </td>
                                  <td class="text-center">
                                    Voice
                                  </td>
                                  <td class="text-center">
                                    <div class="clearfix">
                                      <div class="text-center">
                                        <strong>N/A</strong>
                                      </div>
                                    </div>
                                    <div class="progress progress">
                                      <div class="progress-bar bg-green" role="progressbar" style="width: 0%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="0"></div>
                                    </div>
                                    </td>
                                  <td class="text-right">
                                    <a href="" class="btn btn-secondary btn-sm">Connect</a>
                                  </td>
                                </tr>


                              <?php
                              $sql_server_list = "SELECT sid, ip, port, rcon, modid, hostname FROM sb_servers WHERE enabled='1' ORDER BY sb_servers.sid ASC";
                              $r_server_list = $banlist_connect->query($sql_server_list);

                              require __DIR__ . '/config/server-query/SourceQuery/bootstrap.php';
                              use xPaw\SourceQuery\SourceQuery;

                              $Query = new SourceQuery( );
                              ?>

                               <?php while($row_server_list = $r_server_list->fetch_assoc()){ ?>


                                <?php

                                  $server_adress = $row_server_list["ip"];
                                  $server_port   = $row_server_list["port"];
                                  $server_rcon   = $row_server_list["rcon"];
                                  $server_modid  = $row_server_list["modid"];
                                  $server_motd   = $row_server_list["hostname"];


                                  $server_ip = $server_adress.":".$server_port;
                                  $server_ip = strtoupper($server_ip);

                                  $green  = "green";
                                  $red    = "red";

                                  try {
                                    $Query->Connect( $server_adress, $server_port );

                                    $server_info = $Query->GetInfo( );
                                } catch( Exception $e ) { } finally{ $Query->Disconnect( ); }

                                if(empty( $server_info)){

                                  $server_status = 0;
                                  $server_map = "Unknown";
                                  $server_now = "0";
                                  $server_max = '0';

                                } else {

                                    foreach( $server_info  as $InfoKey => $InfoValue ):
                                        if ($InfoKey == "Map") { $server_map = $InfoValue; $server_status = 1;
                                        } elseif ($InfoKey == "MaxPlayers") { $server_max = $InfoValue;
                                        } elseif ($InfoKey == "Players") { $server_now = $InfoValue;}
                                endforeach;
                                };



                                if($server_status==1){$server_status=$green;} elseif($server_status!=1){$server_status = $red;};

                                $server_online_per =  $server_now / $server_max * 100;

                                ?>

                                <tr>
                                  <td class="text-center">
                                    <div class="avatar d-block" style="background-image: url(https://i.imgur.com/F4oac1p.png)">
                                      <span class="avatar-status bg-<?php echo $server_status;?>"></span>
                                    </div>
                                  </td>
                                  <td>
                                    <div><?php echo $server_motd;?></div>
                                    <div class="small text-muted">
                                      Couter-Strike: Global Offensive
                                    </div>
                                  </td>
                                  <td class="text-center">
                                    <input type="text" maxlength="100" class="form-control text-center" value="<?php echo $server_ip;?>" id="<?php echo $server_motd ?>" readonly>
                                  </td>
                                  <td class="text-center">
                                    <?php echo $server_map;?>
                                  </td>
                                  <td class="text-center">
                                    <div class="clearfix">
                                      <div class="text-center">
                                        <strong><?php echo $server_now."/".$server_max;?></strong>
                                      </div>
                                    </div>
                                    <div class="progress progress">
                                      <div class="progress-bar bg-green" role="progressbar" style="width: <?php echo $server_online_per; ?>%" aria-valuenow="<?php echo $server_now;?>" aria-valuemin="0" aria-valuemax="<?php echo $server_max;?>"></div>
                                    </div>
                                    </td>

                                  <td class="text-right">
                                  <a href="#" class="btn btn-secondary btn-sm">Info</a>&nbsp&nbsp<a href="steam://connect/<?php echo $server_ip;?>" class="btn btn-secondary btn-sm"> Connect</a>
                                  </td>
                                </tr>



                                <?php ;}; ?>



                              </tbody>
                            </table>
                          </div>
                        </div>
                      </div>

Chci docílit: Chcem aby mi ukazovalo vypnutý server takto.

 $server_status = 0;
 $server_map = "Unknown";
$server_now = "0";
$server_max = '0';

Ďakujem za akúkoľvek pomoc.

Editováno 25.9.2018 20:57
 
Odpovědět 25.9.2018 20:55
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.9.2018 16:07

co je Quary?

===

SourceQuery - to taky nevim, co dela, ale prelozeno z anglictiny je to zdroj + dotaz, to uz dava smysl, nejspis neco jako sql dotaz

===
?>
<?php
Nechapu, jako ma duvod prerusovat a hned spoustet php dekoder? :)

===

while($row_ser­ver_list = $r_server_list->fetch_assoc()){
... uvnitr tehle zavorky musis provest php kod a pridat vysledek do textoveho retezce, ktery pak nekde dal za zavorkou vypises pres echo
... nebo vypisovat to primo pres echo "htlm kod"
... nebo tam dat michaninu php a html kodu, vypisovat tu tabulku s prerusovanim php echo a html kod (o co ses pokousel a nedoporucuji to tka resit)
}

===

Cely ten php kod pekne zpracuj pred vypisem a dole to pak vypis. mel bys tam mit neco takoveho...

<?php
// vsechen pph kod
$str = '';
while($row_server_list = $r_server_list->fetch_assoc()){
    $str .= "<tr><td>". $row_server_list["ip"]."</td></tr>";
    }
$str = str=='' ? '' : '<table>'.$str.'</table>';
// konec php kodu a pak uz je jen html stranka
?>
<p>zacatek html</p>
<p>stred html</p>
<?php echo $str; ?> --- vsimni si, ze tu nemam zadne cykly ani dalsi php kod, jen echo
<p>konec html</p>

Lze to napsat i takto:

    $str .= '
<tr>
<td>'. $row_server_list["ip"].'</td>
<td>'. $row_server_list["necojineho"].'</td>
</tr>
';
 
Nahoru Odpovědět 26.9.2018 16:07
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.9.2018 16:10

Jo, k cemu asi doslo? Ty jsi zpracoval vsechen php kod a zustal ti v promennych posledni vysledek. takze kazdy dalsi radek bude ted uz stejny.
Jinymi slovy, mas spatne zavorku v php, mela byt niz.

Nebo mas ten cyklus sice krasne nahore, ale vsechny data si prepisujes poslednim. A zbyde jen posledni. A ten se vypise.
Jinymi slovy, mas tam dva ruzne cykly, ktere delaji 2 ruzne veci a meli pracovat spolu.
Tomu by ses prave vyhnul, kdybys je mel spolu a ne roztristene uprostred html kodu. Staci mala chybka a dela to neco jineho.

Editováno 26.9.2018 16:12
 
Nahoru Odpovědět 26.9.2018 16:10
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.9.2018 16:14

jakoze se mi to nechtelo zkoumat, co to presne dela, protoze bez kodu to nejde spustit.
Zkus si tam dat
echo '<pre>'; var_dump($tes­tovana_promen­na); echo '</pre>';
V kazdem tom cyklu a dosad spravnou promennou. Uvidis, ze se vypise vse. Takze je to jen o usporadani kodu, mit to ve spravne zavorce.

Editováno 26.9.2018 16:15
 
Nahoru Odpovědět 26.9.2018 16:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.