Запрос локальной базы данных PostGIS через PHP - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь настроить локальную карту листовок, которая используется из моей локальной базы данных PostGIS.Я написал PHP-файл, который выполняет запросы, но, похоже, он не работает - я новичок как в Javascript, так и в PHP, и я не уверен, как решить проблему, с которой я столкнулся.

Всякий раз, когда я загружаю index.html, он запускает Ajax-запрос к файлу PHP.Запрос просто не выполняется без отображения сообщений об ошибках.

Я предполагаю, что проблема заключается в файле PHP, но открытие, которое не очень помогло - веб-консоль не сообщает об ошибках, и все, что отображается, этоследующее:

$attr{ // echo $attir.", "; //} //echo ";"; //}

Вот файл PHP:

<!DOCTYPE html>
<html>
<body>

<h1>Query</h1>


<?php
    #header("Access-Control-Allow-Origin: *");
    #Set header
    #header('Content-type: application/json');
    ini_set('display_errors', 1);
    error_reporting(E_ALL);

    #Get Data
    #$parameter1 = $_POST['lat'];
    #$parameter2 = $_POST['long'];

    $host= 'localhost';
    $port= '5432';
    $dbname = 'database';
    $user = 'user';
    $password = 'password';

    $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
    if (!$conn) {
        echo "Not connected: " . pg_error();
        exit;
    }

    $sql = "SELECT *, ST_AsGeoJSON(ST_Transform(geom, 4326)) AS geojson FROM alb_cr.cr_point WHERE table_id = 761";

    if (!$response = pg_query($conn, $sql)) {
        echo "Query failed";
        exit;
    }

    while ($row = pg_fetch_row($response)) {
        foreach ($row as $i => $attir) {
            echo $attir.", ";
        }
        echo ";";
    }

?>

</body>
</html>

А вот запрос Ajax:

            $.ajax({
                type:     "GET",
                url:      "localhost/pull.php",
                success: function(data){
                    alert(data);
                    console.log('passed ' + data);
                },
                error: function(){
                    alert("Failed"); 
                }
            });

1 Ответ

0 голосов
/ 28 января 2019

Поскольку вы новичок в PHP и Javascript, я позволю себе дать вам несколько архитектурных предложений, если можно так выразиться.

Во-первых, вам нужно иметь свой index.php (или любую страницу, на которой должны отображаться результаты запросов, в соответствии с вашим дизайном), чтобы доставить тело страницы со сценарием AJAX, включенным в тело страницы или (предпочтительно) включенным в виде отдельного сценария вместе с Остальная часть JS может вам понадобиться, как это делается для jQuery (который вы используете для AJAX).

<?php
//Output initial page contents
$html = <<<HTML
<!doctype html>
<html>
    <head>
        <!--include jQuery library since, you use it for AJAX-call-->
        <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    </head>
    <body>
        <h1>Query</h1>
        <div id="result"></div>
        <script>
            $.ajax({
                type: "GET",
                url: "localhost/pull.php",
                success: function (data) {
                    alert(data);
                    console.log('passed ' + data);
                },
                error: function(){
                    alert("Failed"); 
                }
            });
        </script>
    </body>
</html>
HTML;

echo $html;

?>

Далее я бы использовал ваш отдельный localhost / pull.php для ответа на результаты запроса при запросе:

<?php
    $host= 'localhost';
    $port= '5432';
    $dbname = 'database';
    $user = 'user';
    $password = 'password';

    $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
    if (!$conn) {
        echo "Not connected: " . pg_error();
        exit;
    }

    $sql = "SELECT *, ST_AsGeoJSON(ST_Transform(geom, 4326)) AS geojson FROM alb_cr.cr_point WHERE table_id = 761";

    if (!$response = pg_query($conn, $sql)) {
        echo "Query failed";
        exit;
    }

    while ($row = pg_fetch_row($response)) {
        foreach ($row as $i => $attir) {
            echo $attir.", ";
        }
        echo ";";
    }

?>

При этом вы сможете получать результаты запроса в желаемом формате, отправляемые обратно в консоль при отдельном выполнении pull.php (или, по крайней мере, при ответе на него с некоторыми значительными ошибками). После этого вы можете перейти на клиентскую сторону, чтобы увидеть (в Developer Tools-> Network), вернул ли ваш AJAX-запрос данные в браузер.

...