Tabelle als Karte

DexterN

Mitglied
hi..

ich will ne tabelle bauen in der anhand der x & y coordinaten die position eines users auf der map festgelegt wird..

zur zeit mach ich es so..

PHP:
	<table width="100%" height="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="c0c0c0">

$conn_id = mysql_connect($host,$id,$pw);
mysql_select_db($database,$conn_id);

$xmax = 50;
$ymax = 50;
$width = 100 / $ymax;
$height = 100 / $xmax;
for ($x = 1; $x <= $xmax; $x++) {

echo '	 <tr>';

for ($y = 1; $y <= $ymax; $y++) {
$row = mysql_fetch_array(mysql_query("SELECT * FROM map WHERE xcoord = $x && ycoord = $y"));

echo '	  <td bgcolor="#ffffff" width="' . $width . '%" height="' . $height . '%" align="center" valign="middle">';
if ($row['xcoord'] == $x && $row['ycoord'] == $y) {
echo '<img src="x.gif" width="5" height="5" border="0">';
}
echo '</td>';

}

echo '	 </tr>';

}
?>
	</table>

aber ich bin mir sicher es gibt eine einfachere methode mit der mysql abfrage..
da das bei momentan 50 x 50 zellen immerhin 2.500 anfragen an die DB

währe echt hilfreich wenn ihr mir helfen könnten

cu DexterN
 
Wozu brauchst du denn überhaupt die MySQL-Abfrage?
Im Augenblick werden damit doch nur Werte ausgelesen, die sowieso schon vorhanden sind!

Ich mein' das hier:

PHP:
if ($row['xcoord'] == $x && $row['ycoord'] == $y)

Wozu soll das dienen?!
Die MySQL-Abfrage muss doch irgendetwas speichern, das du dringend brauchst!
Aber die "xcoord" sind doch schon in $x gespeichert! Das Selbe gilt doch für $y!
Was bezweckst du damit?

So wie ich das sehe, "zeichnest" du erstmal eine Tabelle (ich leg' jetzt keinen Wert auf eine zeitlich richtige Reihenfolge).
Dann wird in jedem Schleifendurchlauf per MySQL-Query geprüft, ob - tja, was denn?
Im Augenblick, ob ein Datensatz mit den passenden Koordinaten vorhanden ist.
Aber warum genau das denn?
Bzw. was speicherst du genau in der Datenbank?
Gibt es da irgendein Bezug zu dem Benutzer?

Also im Augenblick wird bei jedem Datensatz, der die entsprechenden Koordinaten aufweist ein "x" ausgegeben.
Wo ist da der Bezug zu

in der anhand der x & y coordinaten die position eines users auf der map festgelegt wird

?
Woher weiss denn die Tabelle, wo der User ist?
Ich vermute mal, dass in der Tabelle map alle User mit den entsprechenden Positionen drin stehen?!
Aber in dem Fall würde ja ALLE User ausgegeben!
Tut mir leid, aber mir bleibt der Sinn dafür irgendwie verborgen! (bin ich blind?!)
Und wenn ich den Sinn nicht verstehen, weiss ich auch nicht, wie die Query aussehen soll!
Könntest du das Ganze mal etwas beschreiben?
 
Zuletzt bearbeitet:
stimmt schon was du sagst..

in der tabelle stehn die benutzer drinnen mit ner X und ner Y coordinate..
und ich frage die DB ab ob sie einen eintrag (also einen benutzer) enthält der
die coords X & Y hat..wenn ja soll er mir nen kreuz in die zelle setzen..

alle anderen felder sollen leer bleiben

Hier is mal Online

ps:

es handelt sich hierbei um eine Karte eines online games die ich für ne Allianz seite umsetze damit man weis wo die anderen leute grade sind..
 
Ich setz' das mal so um, wie es mir am ehesten eingefallen ist (es kann durchaus sein, dass es besser zu lösen ist!):

PHP:
<table width="100%" height="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="c0c0c0"> 

$conn_id = mysql_connect($host,$id,$pw); 
mysql_select_db($database,$conn_id); 

$xmax = 50; 
$ymax = 50; 
$width = 100 / $ymax; 
$height = 100 / $xmax; 

$query = mysql_query("SELECT * FROM map");
while ($row =  mysql_fetch_array($query))
{
$map[$row['xcoord']."_".$row['ycoord']] = true;
}


for ($x = 1; $x <= $xmax; $x++) { 

echo '     <tr>'; 
for ($y = 1; $y <= $ymax; $y++) { 
    echo '<td bgcolor="#ffffff" width="' . $width . '%" height="' . $height . '%" align="center" valign="middle">'; 
    if (isset($map[$x."_".$y])
        echo '<img src="x.gif" width="5" height="5" border="0">'; 
    
    echo '</td>';  
}
echo '     </tr>'; 

} 
?> 
    </table>

Ich hab' jetzt ein neues Array namens $map erzeugt, in dem alle User (bzw. deren Koordinaten), die in der Tabelle vorhanden sind, gespeichert werden.

PHP:
while ($row =  mysql_fetch_array($query))
{
$map[$row['xcoord']."_".$row['ycoord']] = true;
}

Dadurch wird das Array gebildet.

Anschließend wird mittels

PHP:
if (isset($map[$x."_".$y])

Überprüft, ob die Koordinaten vorhanden sind.


Übrigens:
Ich rate dir dringend dazu etwas an der Download-Geschwindigkeit zu basteln!
Die Tabelle hat bei mir mehrere Minuten zum Laden gebraucht!
Kannst ja mal probieren, das mit zlib zu komprimieren!
Das spart auch ungemein Traffic!
 
Original geschrieben von DexterN
stimmt schon was du sagst..

in der tabelle stehn die benutzer drinnen mit ner X und ner Y coordinate..
und ich frage die DB ab ob sie einen eintrag (also einen benutzer) enthält der
die coords X & Y hat..wenn ja soll er mir nen kreuz in die zelle setzen..

alle anderen felder sollen leer bleiben

Hier is mal Online

ps:

es handelt sich hierbei um eine Karte eines online games die ich für ne Allianz seite umsetze damit man weis wo die anderen leute grade sind..
Wenn du solche andauernden Prüfungen hast würde ich erst alle Werte in ein Array lesen.
Das geht deutlich schneller!
Ansonsten wird nachher im Online Betrieb ( Ein Onlinegamer drückt gerne mal F5 ) dein Server in die Knie gehen bei dem Haufen von Mysql Abfragen!

Gibt es eigentlich eine schöne Möglichkeit solch eine "Tabelle" mit GD zu machen ?
Habe noch nicht mit GD großartig gearbeitet und frage mich, ob es dort nicht auch ein schönes Raster mit Adressierung im Koordinaten verfahren gibt :)

/edit:
Oh ja!
http://nyphp.org/content/presentations/GDintro/
Ein sehr schönes Dokument zur GD Library.
Auf jeden Fall praktisch für solch eine grafische Darstellung :)
 
Zuletzt bearbeitet:
Zurück