Avatar billede thewizard Nybegynder
29. juni 2009 - 22:54 Der er 6 kommentarer

Tabel med input fra double array

Hey champs.

Jeg har en DB med coordinater Y og X. Og en tabel, lavet i HTML - hvor udtrækkene kommer frem.

Tabellen er 15x15. Hver gang den finder et koordinat, som også befinder sig i databasen, skriver den B - ellers X.

Problemet er at den kun checker databasen FØRSTE gang den den looper og derfor finder den ikke alle byer i databasen.

Jeg har ikke interesse i at lave en connection til mySQL'en hver gang jeg looper. Håber nogen derude kan hjælpe.

Her er koden:

$grid = 15;
$halfgrid = $grid/2;
if ($posX < $halfgrid){
    $lowerBoundX = 0;
    $upperBoundX = $grid;
}else{
    $lowerBoundX = $posX-$halfgrid;
    $upperBoundX = $posX+$halfgrid;
}
if ($posY < $halfgrid){
    $lowerBoundY = 0;
    $upperBoundY = $grid;
}else{
    $lowerBoundY = $posY-$halfgrid;
    $upperBoundY = $posY+$halfgrid;
}

$connection = mysql_connect($host, $user, $password) or die ("Could not connect.");
$db = mysql_select_db($database, $connection) or die ("Could not select database.");
$sqlquery = mysql_query("SELECT * FROM cities WHERE x <= ".$upperBoundX."
                                                                                                AND x >= ".$lowerBoundX."
                                                                                                AND y <= ".$upperBoundY."
                                                                                                AND y <= ".$upperBoundY) or die(mysql_error());

    $countX = 0;
    $countY = 0;
    echo "<table border=1 width='100%'>";
    echo "<tr>";

        while($countX <= $grid && $countY <= $grid){
           
            echo "<td>";

            while($d = mysql_fetch_assoc($sqlquery)){
                echo ".";
                if ($d[x] == $countX && $d[y] == $countY){
                    echo $countX." ".$countY;
                    echo "B";
                    $found = true;
                }
            }
            if ($found != true){
                echo $countX." ".$countY;
                echo "X";
                $found = false;
            }
            echo "</td>";
                   
            if($countX%$grid == 0 && $countX>0){
                echo "</tr>";
                $countX = 0;
                $countY++;
            }else{
                $countX++;
            }           

           
        $found = false;
        }
    echo "</table>";
            ?>
Avatar billede thewizard Nybegynder
29. juni 2009 - 23:01 #1
Hvis jeg f.eks. har et koordinat (0,0) og (1,2) vil den KUN finde 0,0 - men ikke 1,2...
Avatar billede tjaz Nybegynder
30. juni 2009 - 00:29 #2
jeg forstår ikke din SQL sætning:

WHERE x <= ".$upperBoundX." AND x >= ".$lowerBoundX." AND y <= ".$upperBoundY." AND y <= ".$upperBoundY

Lad os antage at x = 5 og y = 10

HVOR x er mindre end eller lig med 5 OG x er større end eller lig med 5 OG y er mindre end eller lig med 10 OG y er større end eller lig med 10

Hvilket værdier udelukket det? ingen? ... i så fald kan du nøjes med at skrive:

SELECT * FROM cities

Nå her kommer det du måske kan bruge til noget:

Lav dit output til et array:

Får du følgende output af din SQL: array(array("x" => 0, "y" => 0), array("x" => 1, "y" => 2))

Må det være et spørgsmål om gennemløbe værdierne for hver gang at du laver et nyt felt i dit grid for at finde ud af om den findes i dit array og udskrive den korrekte værdi, husk at break hvis du finder værdien, ellers har du tabt alt hvad der hedder performance hvis det er et stort grid.

For at optimere, kan du strukturere dine arrays udfra f.eks. x eller y, så du ikke skal gennemløbe hele arrayet hver gang.
Avatar billede repox Seniormester
30. juni 2009 - 00:33 #3
Jeg opgav at finde ud af din kode, så jeg fandt på min egen...
Kildekoden kan du se her:
http://pastebin.com/me771eec

Resultatet kan du se her:
http://err0r.dk/cities.php

Det du prøver at opnå, vil du kunne opnå på den måde.
Du skal bare lige lave lidt små udregner, for at få det til at passe ind i dine boundaryes...
Avatar billede thewizard Nybegynder
01. juli 2009 - 15:51 #4
Der var lidt fejl i min SQL-string.

Rettelsen
WHERE x <= ".$upperBoundX." AND x >= ".$lowerBoundX." AND y <= ".$upperBoundY." AND y >= ".$upperBoundY

Sådan.

Men er ikke svaret på mit spørgsmål ;).
Avatar billede thewizard Nybegynder
01. juli 2009 - 15:53 #5
Overstående SQLstring var også forkert  - jeg giver point til repox, koden ser ud til at være god.
Avatar billede repox Seniormester
01. juli 2009 - 19:08 #6
Så længe jeg hjælp med at løse problemet :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester