Hallo
Habe im moment wieder etwas Zeit und hab mich hier noch mal etwas mit der Sache beschäftigt.
Mir ist am Anfang ein kleiner Fehler unterlaufen , und zwar baut sich das array etwas anders auf :
$status_antwort_data
Code:
Array
(
[0] =>
[1] =>
[2] => 0 0 CNCT BeZImiEnNy SZ. KL.1997150 88.220.xx.xx:12203 34362 10000
[3] => 1 2 62 p 134950 212.149.xx.xx:25641 18908 5000
[4] => 2 0 103 Essam 0 196.218.xx.xx:10643 42223 30000
[5] => 3 22 999 Yahoo 118150 90.31.xx.xx:12203 24967 25000
[6] => 4 0 999 manix 582900 83.198.xx.xx:12203 29811 25000
[7] => 5 64 59 UnnamedSoldier 50 217.84.xx.xx:12203 15321 10000
[8] => 6 5 28 vector 50 213.93.xx.xx:-869 62834 25000
[9] => 7 8 50 yourself 50 86.140.xx.xx:12203 7091 25000
[10] => 8 2 46 BOOM-KILLER 0 83.93.xx.xx:12203 44537 5000
[11] => 9 8 220 Prazeres 0 87.103.xx.xx:12203 25197 20000
[12] => 11 38 69 Mike Waht hack u use 250 82.174.xx.xx:12203 23044 5000
[13] => 13 0 37 dulex$$.TRF 0 87.79.xx.xx:12203 44982 25000
[14] => 14 7 23 /*Anton aus Tirol*/ 0 84.63.xx.xx:12203 14703 30000
[15] => 15 0 999 dA # louis 7500 77.216.xx.xx:12203 40562 25000
)
Ich habe jetzt etwas mit der foreach Schleife von undefined experementiert und habe das Problem das es zu Verschiebungen in der Tabelle kommt, da einige leerzeichen im array dafür sorgen das der falsche Wert für einen Key zurückgeliefert wird!
Ich habe bereits versucht verschiedene Zeichfolgen zu filtern aber es kommt immer wieder ein neuer Client mit ausgefallenden Namen das die Ausgaben sich verschieben.
Der Code sieht im moment wie folgt aus:
PHP-Code:
$array = array();
foreach( $status_antwort_data AS $k => $v ) {
if ( $status_antwort_data) {
$v = htmlentities( $v, ENT_QUOTES, "UTF-8" );
$v = str_replace( "²","", $v ); // ² fals vorhanden aus namen entfernen
//Zeichenvorkommen filtern die zu Problemen bei der Anzeige führen
$vorkommen = array(") ", " )", "( ", "( ", "* ", " *", "- ", " -", "| ", " |", ". ", " .", "[ ", " [", "] ", " ]");
$v = str_replace($vorkommen, "³", $v);
$v = preg_replace('/\s\s+/', ' ', $v); //unnötige leerzeichen entfernen
$v = substr($v, 1);
$v = str_replace("CNCT","999",$v);
$v = str_replace("ZMBI","Disconnect",$v);
$v = str_replace( " ","²", $v ); //neuen Trenner setzen
$v = preg_replace( "/([a-z])(²)([a-z])/i", "$1 $3", $v );
$v = str_replace("³", " ", $v);
$array[$k] = $v;
}
}
Der Code für die Tabelle:
PHP-Code:
//Spieleranzahl ermitteln
$playercount = count($array)-2;
//Tabelle fuer die Ausgabe
echo '<table border="1" align="center" width="780"><tr><td>';
if ($status_antwort_data){
echo '<tr>';
echo '<th><u>num</u></th>';
echo '<th><u>score</u></th>';
echo '<th><u>ping</u></th>';
echo '<th><u>name</u></th>';
echo '<th><u>lastmsg</u></th>';
echo '<th><u>address</u></th>';
echo '<th><u>cport</u></th>';
echo '<th><u>qport</u></th>';
echo '<th><u>rate</u></th>';
echo '<th><u>Kick</u></th>';
echo '<th><u>Ban</u></th>';
echo '</tr>';
$x = 0;
while ($x <= $playercount) {
$x++;
$spielerinfo = explode('²',$array[$x]);
echo "<tr>";
echo "<td align=center><font size=\"2\">$spielerinfo[0]</font></td>";
echo "<td align=center><font size=\"2\">$spielerinfo[1]</font></td>";
if($spielerinfo[2] == 999) echo "<td align=\"center\"><font size=\"2\" color=red>$spielerinfo[2]</font></td>";
elseif ($spielerinfo[2] > 100) echo "<td align=\"center\"><font size=\"2\" color=#F07C1D>$spielerinfo[2]</font></td>";
elseif ($spielerinfo[2] < 100) echo "<td align=\"center\"><font size=\"2\" color=green>$spielerinfo[2]</font></td>";
else echo "<td align=\"center\"><font size=\"2\" color=red>$spielerinfo[2]</font></td>";
echo "<td align=center><font size=\"2\">$spielerinfo[3]</font></td>";
echo "<td align=center><font size=\"2\">$spielerinfo[4]</font></td>";
$spielerip = explode(":", $spielerinfo[5]);
echo "<td align=center><font size=\"2\">$spielerip[0]</font></td>";
$spielerip[1] = str_replace( "-","", $spielerip[1] );
echo "<td align=center><font size=\"2\">$spielerip[1]</font></td>";
echo "<td align=center><font size=\"2\">$spielerinfo[6]</font></td>";
echo "<td align=center><font size=\"2\">$spielerinfo[7]</font></td>";
if($spielerinfo[3]) {
echo "<td width=15>
<FORM METHOD=Post ACTION=\"include.php?server=mohaaplayers\" NAME=\"kick_client\">
<INPUT Type=hidden Name=\"kick\" VALUE=\"$spielerinfo[0]\">
<INPUT Type=submit Name=\"kick_client\" VALUE=\"Kick\">
<INPUT Type=\"hidden\" Name=\"rconpass\" VALUE=\"$_POST[rconpass]\">
<INPUT Type=\"hidden\" Name=\"server_port\" VALUE=\"$_POST[server_port]\">
<INPUT Type=\"hidden\" Name=\"server_ip\" VALUE=\"$_POST[server_ip]\">
</FORM>";
echo "</td>";
}
if($spielerinfo[3]) {
echo "<td width=15>
<FORM METHOD=Post ACTION=\"include.php?server=mohaaplayers\" NAME=\"Ban\">
<input type=hidden name=Ban value=$spielerip[0]>
<INPUT Type=submit VALUE=\"Ban\">
</FORM>";
echo "</td>";
}
echo "</tr>";
}
}
Was dabei raus kommt seht ihr im Screenshoot im Anhang.
Client 0,11 und 15 sind solche Kadidaten!
Wenn ich die Playerinformationen in ein eigenes array schreiben lasse , so wie von undefined vorgeschlagen mit "$array[$k] = explode( "²", $v );" statt "$array[$k] = $v;" dann sieht die Ausgabe für Client 15 so aus:
Code:
[17] => Array
(
[0] => 15
[1] => 0
[2] => 999
[3] => dA
[4] => #
[5] => louis
[6] => 7500
[7] => 77.216.xx.xx:12203
[8] => 40562
[9] => 25000
)
Die brauche aber so eine ausgabe:
Code:
[17] => Array
(
[0] => 15
[1] => 0
[2] => 999
[3] => dA # louis
[4] => 7500
[5] => 77.216.xx.xx:12203
[6] => 40562
[7] => 25000
)
Kann mir jemand noch einen Tip geben wie das array so filtere das ich die kompletten Playernamen mit leerzeichen und sonstigen in $spielerinfo[3] habe?
Gruss Oli
Lesezeichen