2017-05-26 9 views
-1

私は、HTML、PHP、Javascriptを含む.phpファイルと、日付で注文されたGPS情報を含むMySQLにdataという名前のテーブルを使用しています。ユーザーがフォームに日付を入力できるように、次のコードを使用しています。ユーザーが日付を入力すると、サーバー側で、ボタンを押した後 Google Maps APIでMySQLデータを使用する

<form method="POST"> 
     <div class="col-sm-12"> 
      <p> 
       <label for="route_date_ids">Insert date</label> 
       <input name="route_date_id"></input> 
      </p> 
     </div> 
     <div class="col-sm-12"> 
      <p> 
       <input type="submit" value="View route"/> 
      </p> 
     </div> 
    </form> 
<?php if (isset($_POST['route_date_id'])) : ?> 
<?php 
$query = "SELECT * FROM data WHERE measured_at LIKE ". $_POST['route_date_id']; 
$result = mysqli_query($conn, $query); 

ので、私はその日、ユーザーが入力した文字で始まるデータを取得します。私のobjetiveは今、その情報(緯度と経度のデータを含む$結果)を次の関数に渡すことです。

function initMap() { 
    var map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 3, 
     center: {lat: 0, lng: -180}, 
     mapTypeId: 'terrain' 
    }); 
    var flightPlanCoordinates = [ 
     {lat: 37.772, lng: -122.214}, 
     {lat: 21.291, lng: -157.821}, 
     {lat: -18.142, lng: 178.431}, 
     {lat: -27.467, lng: 153.027} 
    ]; 
    var flightPath = new google.maps.Polyline({ 
     path: flightPlanCoordinates, 
     geodesic: true, 
     strokeColor: '#FF0000', 
     strokeOpacity: 1.0, 
     strokeWeight: 2 
    }); 

    flightPath.setMap(map); 
} 

したがって、送信後にページをリロードすると、マップはユーザーが入力した日付に対応する座標を示します。

この最後の質問は解決できません。どんな助けもありがとう。

+2

あなたのコードは[** SQLインジェクション**](https://en.wikipedia.org/wiki/SQL_injection)攻撃の脆弱性があります。 [** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)または[** PDO **](https://secure.php.net/)を使用してください。 manual/en/pdo.prepared-statements.php)は、[** this post **](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql - インジェクション - イン - php)。 –

+0

クエリから結果を確認するときは、javascript変数を作成し、initmap関数または別の関数から読み込みます。動的更新が必要な場合は、jqueryを使用してデータを要求し、jsonとしてクライアントに送信し、javascriptで解析/処理します。 –

+0

@Sakura Kinomotoどのようにクエリから結果を含むjavascript変数を作成し、initMapから読み込むことができますか?申し訳ありませんが、私はJavascriptとPHPの初心者です! – Eduardo

答えて

1

は、次のようにIDを形成与える:次のように

<form id = "form"> 

も、入力フィールドにIDを与える(inputタグを覚えて、スタンドアローンタグである、それはタグを閉じる必要はありません)

<input name="route_date_id" id = "route_date_id"> 

initMap()メソッドの外で、以下のスクリプトに示すように変数 'map'を宣言し、 'data_fetcher.php'という名前の別ファイルを作成し、ajax呼び出しを行い、$ _POST [ 'date_value']をdate_fetcher.phpファイルに書き込んでから、lat、lng daをフェッチするロジックを書いてくださいtaは日付に対応します。結果を取得したら、それを配列に格納し、結果をjson_encodeにしてエコーすると、ajax呼び出しに応答して返されます。結果で得られたlat、lngが配列に格納される必要がある次のスクリプトのコメントを観察します。また、jqueryライブラリを含めることを忘れないでください。

var map; 
function initMap() { 
    var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 3, 
    center: {lat: 0, lng: -180}, 
    mapTypeId: 'terrain' 
}); 
google.maps.event.addDomListener(document.getElementById('form'), 'submit', function(e) { 
    var date_data = document.getElementById('route_date_id').value; 
    $.ajax({ 
    url:"data_fetcher.php", 
    type:"POST", 
    data: {date_value:date_data},   
    dataType: 'json', 
    success: function(respond){ 


//In the respond you will get the coordinates add them to the array, 'flightPlanCoordinates' then 


     var flightPath = new google.maps.Polyline({ 
      path: flightPlanCoordinates, 
      geodesic: true, 
      strokeColor: '#FF0000', 
      strokeOpacity: 1.0, 
      strokeWeight: 2 
     }); 

     flightPath.setMap(map);   
    console.log("AJAX level request was successful"); 
    }, 
    error: function(){ 
    console.log("AJAX level request was a failure"); 
    } 
}); 

ハッピーコーディング!!!

+0

AJAXにはあまりありませんが、最後の数日間は作業していました。優れた対応。 – Eduardo

関連する問題