Karte mit Koordinaten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Karte mit Koordinaten

    Bin blutiger Anfänger im Bereich php.
    Vieleicht kann mir jemand bei der Umsetzung folgender Idee hilfreich sein.

    Ich möchte gern eine Karte mit Hilfe einer Datenbank erstellen, also eine große Karte aus vielen kleinen Bildern.
    Ich hoffe jeder versteht was ich meine.
    Dazu habe ich mir eine Datenbank erstellt die die tabelle "map" enthält.
    In der Tabelle existieren folgende Feldern:

    coordx - Enthält die fiktiven X Koordinaten eines Bildes
    coordy - Enthält die fiktiven Y Koordinaten eines Bildes
    image - Enthält den Pfad zur Bilddatei

    Ausgegeben werden soll am Ende eine Karte bestehend aus 20x20 Bildern.

    Code:
    [01/01] ... [01/10] ... [01/20]
    .
    .
    .
    [10/01] ... [10/10] ... [10/20]
    .
    .
    .
    [20/01] ... [20/10] ... [20/20]
    Hab leider kaum Ideen, wie ich das umsetzen könnte.

    Die Ausgabe ist vermutlich am einfachsten mit zwei ineinandergreifenden while schleifen, während die eine sagt ... spuck solange <tr>'s aus, bis y=20 während die zweite sagt ... spuck solange <td><img src="$row['image']"></td> aus, bis x = 20

    Aber wie sieht der sql befehl aus, wie die genaue syntax.
    Ich möchte es unbedingt lernen und ich denke an einem praktischen Beispiel geht es sehr gut.
    Es wäre nett, wenn mir jemand eine Lösung oder zumindest einen Lösungsansatz liefern könnte.

    Danke!

  • #2
    PHP-Code:
    $sql 'SELECT * from map';
    $res mysql_query($sql);
    $i 1;
    echo 
    '<table><tr>';
    while(
    $re=mysql_fetch_array($res)){
         if(
    $i%20 == 0){
             echo 
    '<td><img src="'.$re['image'].'" /></td></tr>';
        }else{
            echo 
    '<td><img src="'.$re['image'].'" /></td>';
        }
         
    $i += 1;
    }
    echo 
    '</table>'
    So in der Art ?

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      ja verdammt nochmal!!! genau so soll es sein

      kannst du mir bitte noch kurz erläutern, was die while schleife genau tut?

      das wäre sehr nett.

      Kommentar


      • #4
        Bitte nicht fluchen.
        Mit der SQL Query liest du alle Bilder aus der DB. Die while Schleife geht diese Stück für Stück (sprich Datensatz für Datensatz) durch.
        Der Modulo Operator prüft ob bereits 20 Bilder in einer Reihe stehen, beendet die tr in diesem Falle und öffnet eine neue tr.
        Für genau solche Dinge ist der %-Operator äusserst gut geeignet.
        Wenn du mehr Infos willst dann mysql_fetch_array

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          okay, alles verständlich.

          jetzt gilt jedoch der modulo operator nur für die anzahl horizontaler bilder.
          kann ich ihn genauso einspannen, um auch die anzahl der vertikalen bilder auf 20 zu beschränken, oder sollte ich dabei etwas beachten?

          Kommentar


          • #6
            Bau dir einfach einen anderen Zähler z.B. $ii welchen du nur inkrementierst wenn ein Zeilenende erreicht ist. Wenn dieser Zähler dann bei 20 ankommt, dann hast du 20 Reihen und brichst die Schleife ab, falls noch mehr Bilder in der Db sind.
            PHP-Code:
            $sql 'SELECT * from map';
            $res mysql_query($sql);
            $i 1;
            $ii 1;
            echo 
            '<table><tr>';
            while(
            $re=mysql_fetch_array($res)){
                 if(
            $ii == 20) break;
                 if(
            $i%20 == 0){
                     echo 
            '<td><img src="'.$re['image'].'" /></td></tr>';
                     
            $ii += 1;
                }else{
                    echo 
            '<td><img src="'.$re['image'].'" /></td>';
                }
                 
            $i += 1;
            }
            echo 
            '</table>'
            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              das is klar ... genauso hatte ich es auch eben ausprobiert ... hatte nur nicht funktioniert, weil ich das break; vergessen hatte.

              jetzt stellt sich mir noch eine frage bzgl mySQL.
              my phpmyadmin scheint neue datensätze scheinbar völlig willkürlich einzutragen. das heißt nicht
              15, 1, bildname
              15, 2, bildname
              .
              .
              .

              sondern
              15, 1, bildname
              15, 4, bildname
              14, 3, bildname

              jetzt kann ich alle einträge einzeln in die richtige reihenfolge bringen, was natürlich bei über 420 Einträgen derzeit schon sehr nervig würde, ganz zu schweigen von noch größeren karten.
              die frage wäre dann, lässt sich gleichzeitig noch mit dem script die bilder in die richtige reihenfolge verfrachten.
              heißt eine checkfunktion die überprüft, dass horizontal von 1/1 - 1/20 oder von 3/1 - 3/20 sowie vertikal von 1/1 - 20/1 oder 1/4 - 20/4 gezählt wird?

              /edit: ein order by [koordinate] hat das problem gelöst

              /edit²: nein doch nicht so wirklich ... zwar ist die karte jetzt vertikal geordnet, aber horizontal is sie noch immer quer durch den gemüsegarten
              Hier ein kleiner Auszug aus der "Unordnung"
              Code:
              <tr>
              <td><a href="#"><img src="images/dirt.gif" alt="1/1"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/13"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/14"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/15"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/16"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/17"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/18"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/19"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/20"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/12"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/11"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/10"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/2"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/3"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/4"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/5"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/6"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/7"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/8"/></a></td>
              <td><a href="#"><img src="images/dirt.gif" alt="1/9"/></a></td></tr>
              Zuletzt geändert von Tannim; 28.07.2006, 05:08.

              Kommentar


              • #8
                Du kannst auch nach mehreren Spalten sortieren.
                Code:
                'SELECT * from map ORDER BY ykord ASC,xkord ASC';
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  schau mal hier:

                  *Klick *
                  Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

                  Kommentar


                  • #10
                    mysql_fetch_assoc reicht übrigens in diesem Fall vollkommen aus (genauso wie in ungefähr 100% anderer Fälle auch) und packt den Datenmüll vom Query nicht gleich doppelt in den Ram, wie es bei mysql_fetch_array der Fall ist...

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      Original geschrieben von jahlives
                      Du kannst auch nach mehreren Spalten sortieren.
                      Code:
                      'SELECT * from map ORDER BY ykord ASC,xkord ASC';
                      ich hatte versucht mit einem AND ein zusätzlichen order einzufügen, was natürlich nicht ging.

                      dann hab ich, als ich heut morgen so vor der hitze im bett rumkullerte auch noch daran gedacht, was ich eigentlich für einen quatsch mache, trennt man mehrere anforderungen doch, durch ein komma ... *kopfklatsch*

                      nu gehts auch und er ordered sie richtig.

                      @rolandbar, danke für den link, werde den thread mal studieren.

                      Anbei:
                      Großes Lob an dieses Forum - ich kenne kaum Foren, bei denen N00bs so gut behandelt werden und ihnen so ausführlich geholfen wird, ohne auch nur eine Meckerei wie "benutz die Suchfunktion du arsch" oder "google doch mal du n00b" kommen.
                      Vielen dank

                      Hoffe dass ich auch bei weiteren fragen, wenn sie nicht ganz so "doof" sind so gut beraten werde.

                      Gruß,
                      Marcus

                      Kommentar


                      • #12
                        okay, hab das jetzt alles weitesgehend durchgeackert ... auch den link.
                        wirft einige fragen auf, aber das will ich derweil erstmal hinten anstellen, weil das prinzip, was ich jetzt benutze ein wenig anders ist.

                        meine gesamte karte ist etwa 100x100 felder.

                        dann haben wir ja jetzt im sorce festgelegt, dass nur 20x20 felder der datenbank ausgegeben werden sollen. ist auch alles jetzt soweit klar.

                        jetzt möge man aber noch hoch und runter scrollen können, bzw einen link anklicken können, der es ermöglicht auf der karte weiter nach links,rechts, oben, unten rutschen zu können.

                        dabei hae ich mir überlegt, dass ich einfach die x, y koordinaten per $_GET übergebe.
                        jetzt fehlt mir hier aber der richtige ansatzpunkt.
                        könnte mir da eventuell jemand helfen, oder is da gar das script von jahlives eher ungeeignet für?

                        Kommentar

                        Lädt...
                        X