PHP nie pobiera danych z mysql

0

Witam,
korzystałem ze strony: http://krzysztofplaczek.name/main/articles/show/google_maps_v3___wyszukiwanie_na_mapie_wraz_z_markerami_i_dymkami_informacyjnymi
Stworzyłem swoją mapę, po kliknięciu powinno pokazywać mi obiekty w jakimś promeniu x km, niestety nie pobiera mi danych z mojej bazy MYSQL. Czy jest to może wina poniższego kodu?

Plik: loadpoints.php

$pdo = new PDO('mysql:host=localhost;dbname=nazwa;charset=UTF-8', 'login', 'pass', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
if (isset($_GET['lat'][0]) && isset($_GET['lng'][0]))
{
    switch ($_GET['type'])
    {
        case 1:
            $type = ' AND type = "Bankomaty PEKAO SA"';
            break;
        case 2:
            $type = ' AND type = "Bankomaty PKO BP"';
            break;
        case 3:
            $type = ' AND type = Bankomaty BZWBK';
            break;
        default:
            $type = '';
            break;
    }
    switch ($_GET['distance'])
    {
        case 1:
        case 5:
        case 10:
        case 20:
        case 50:
        case 100:
            $distance = $_GET['distance'];
            break;
        default:
            $distance = 10;
            break;
    }
    switch ($_GET['number'])
    {
        case 10:
        case 20:
        case 30:
            $number = ' LIMIT ' . $_GET['number'];
            break;
        case 0:
            $number = '';
            break;
        default:
            $number = ' LIMIT 10';
            break;
    }
    $query = 'SELECT *, acos(sin(radians(lat))*sin(radians(:lat))+cos(RADIANS(lat))*cos(radians(:lat))*cos(RADIANS(lng-:lng)))*6371 as distance 
FROM  `gps` 
    WHERE acos(sin(radians(lat))*sin(radians(:lat))+cos(RADIANS(lat))*cos(radians(:lat))*cos(RADIANS(lng-:lng)))*6371 < :distance' . $type . '
    ORDER BY distance asc ' . $number;
    $stmt = $pdo->prepare($query);
    $stmt->bindValue(':lat', $_GET['lat']);
    $stmt->bindValue(':lng', $_GET['lng']);
    $stmt->bindValue(':distance', $distance);
    $stmt->execute();
    echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
}
0

Na chwilę pozbądź się parametrów (:lat i :lng) i sprawdź, czy działa. Coś mi się wydaje, że to one psują...

0

Niestety nic to nie dało.

1

Trochę offtop: Strasznie rozlazły piszesz ten kod, wszystko jednym ciągiem. Weźmy np. to:

    switch ($_GET['distance'])
    {
        case 1:
        case 5:
        case 10:
        case 20:
        case 50:
        case 100:
            $distance = $_GET['distance'];
            break;
        default:
            $distance = 10;
            break;
    }

Po co to tak? Można prościej:

if (in_array($_GET['distance'], [1,5,10,20,50,100])) {
    $distance = $_GET['distance'];
}
else {
    $distance = 10;
}

Choć ja bym się pokusił o jednolinijkowca:

$distance = (in_array($_GET['distance'], [1,5,10,20,50,100])) ? $_GET['distance'] : 10;

Poza tym niby korzystasz z PDO, a część zapytania sklejasz ręcznie (powiesz: "to mały fragment", a ja Ci odpowiem: "nawet w tym małym fragmencie zrobiłeś błąd (sprawdź $type=3)")....

Edit: Aha, po prostu źródła, z których czerpiesz wiedzę są.... kiepskie, żeby nie użyć dwóch słów na "d".

0

Ale efekt z Google Maps bardzo ciekawy i interesujący do zastosowania.
Szukałem innych pomocnych przykładów i ten wydał mi się najlepszy.

Baza danych wygląda tak (1 rekord - Pustynia Błędowska okolice Klucz:
user image

Strona, na której chcę to wykorzystać to: http://jura4you.pl/mapa44.php

1 użytkowników online, w tym zalogowanych: 0, gości: 1