ein Server wird nur angezeigt

ATdrag0N

Erfahrenes Mitglied
Guten Tag,

ich habe ein Script gemacht, was mir denn Status mehrerer Server anzeigt.
Die Daten also die IP´s und die Port´s lese ich aus einer DB aus.
Das funktioniert auch alles so weit, nur zeigt der mir nur ein Server richtig an, denn anderen lässt er als Offline da stehen, schalte ich sagen wir ein Server offline, dann zeigt er mir denn anderen Server richtig an.
Voran kann das liegen?

Hier mal der code:

PHP:
<html>
<body>
<table border="0" colspan="2" cellspacing="0" cellpadding="5" width="100%">
 <tr>
  <td width="20%" align="center"><font style="color:#E50000"></font></td>
  <td width="20%" align="center"><font style="color:#E50000"></font></td>
  <td width="20%" align="center"><font style="color:#E50000"></font></td>
  <td width="20%" align="center"><font style="color:#E50000"></font></td>
 </tr>
<?PHP
$dbhost="localhost";

$dbuser="******";

$dbpass="*****";

$dbname="d00872ad";
mysql_connect($dbhost,$dbuser,$dbpass);

mysql_select_db($dbname);

$query = "SELECT * FROM serverliste";

$result = mysql_query($query);


while ($line = mysql_fetch_array($result)) {
$list=array();
$server = "$line[ip]";
$infoport = "$line[infoport]";
$name = "$line[name]";
$serverbefehl="info";


$ip="udp://".$server.""; 
$port = $infoport; 

$connect=@fsockopen($ip, $port, $errno, $errstr, 30); 
if ($connect) {
  socket_set_timeout ($connect, 1, 000000); 
  $send = "\\$serverbefehl\\"; 
  fputs($connect, $send);
  fwrite ($connect, $send);
  $output = fread ($connect, 1); 
  if (! empty ($output)) { 
   do { 
     $status_pre = socket_get_status ($connect); 
     $out = fread ($connect, 1); 
     if ($out=="\\") { if(empty ($b)) $b=1;
	  $list[$b++]=$output; 
	  $output=""; 
     } else { 
      $output = $output . $out; 
     } 
     $status_post = socket_get_status ($connect); 
   } while ($status_pre['unread_bytes'] != $status_post['unread_bytes']); 
  }; 
fclose($connect);

### zuordnen der Variablen ########################################################
$hostname = "";
$mapname = "";
$numplayers = "";
$maxplayers = "";

for($i=0;$i<count($list);$i++) {
   if ($list[$i] == "\gamename") $gamename = $list[$i+1];
   if ($list[$i] == "gamever") $gamever = $list[$i+1]; 
   if ($list[$i] == "hostname") $hostname = $list[$i+1];
   if ($list[$i] == "hostport") $hostport = $list[$i+1];
   if ($list[$i] == "mapname") $mapname = $list[$i+1];
		     $mapname = str_replace(".mix", "", $mapname);
   if ($list[$i] == "gametype")   $gametype   = $list[$i+1];
   if ($list[$i] == "numplayers") $numplayers = $list[$i+1];
   if ($list[$i] == "maxplayers") $maxplayers = $list[$i+1];
}


if (!empty($hostname)){

$hostname = "<span style='color: #FFFFFF; font-size: 7pt; font-weight: bold;'>".$hostname."</span>";
$map = "<span style='color: #FFFFFF; font-size: 7pt; font-weight: bold;'>".$mapname."</span>";

$Player   = "<p align='center'>
 	  <span style='color: #FFFFFF; font-size: 8pt; font-weight: bold;'> &nbsp;&nbsp;&nbsp;Spieler: </span>
          <span style='color: #FFBB00; font-size: 8pt; font-weight: bold;'> ".$numplayers." </span>
  	  <span style='color: #FFFFFF; font-size: 8pt; font-weight: bold;'> von </span>
          <span style='color: #FFBB00; font-size: 8pt; font-weight: bold;'> ".$maxplayers." </span>";
$status = "<span style='color: #FFFFFF; font-size: 7pt; font-weight: bold;'>Online</span>";
} else {

$hostname = "<span style='color: #FFFFFF; font-size: 12pt; font-weight: bold;'>".$name."</span>";
$Player   = "N/A";
$map = "<span style='color: #FFFFFF; font-size: 7pt; font-weight: bold;'>N/A</span>";
$status = "<span style='color: #FFFFFF; font-size: 7pt; font-weight: bold;'>Offline</span>";

}
 ?>

<tr>
  <td width="20%" align="center"><font style="color:#FFFFFF"><? echo $hostname; ?></font></td>
  <td width="20%" align="center"><font style="color:#FFFFFF"><? echo $Player; ?></font></td>
  <td width="20%" align="center"><font style="color:#FFFFFF"><? echo $map; ?></font></td>
  <td width="20%" align="center"><font style="color:#FFFFFF"><? echo $status; ?></font></td>
 </tr>

 <?PHP

 }
 }

mysql_free_result($result);
mysql_close();
?>
</table>
</body>
</html>

Ich hoffe es kann mir wehr helfen.
 
Vielleicht mal aus:

PHP:
while ($line = mysql_fetch_array($result)) {
$list=array();
$server = "$line[ip]";
$infoport = "$line[infoport]";
$name = "$line[name]";
$serverbefehl="info";

das machen:

PHP:
while ($line = mysql_fetch_array($result)) {
$list=array();
$server = $line[ip];
$infoport = $line[infoport];
$name = $line[name];
$serverbefehl="info";

?
 
PHP versteht das schon, auch wenn es falsch ist - genau wie deine Korrektur. ;)

Richtig müsste es wie folgt aussehen:
PHP:
$server = $line['ip'];

Lass dir direkt über der for-Schleife mal den Inhalt von $list ausgeben, sprich einfach ein var_dump( $list ); darüber schreiben.

Gibt es den "hostname" dort bei jedem Eintrag?
 
Zurück