0

私はこれについてあなたたちの助けが欲しい. 私は、緯度/経度およびその他の情報をMySQLデータベースに保存する「クリック」機能を使用して、ユーザーが(情報ウィンドウを使用して)マーカーを作成できるようにするコードを作成しました。これは、マップ上にマーカーを表示するために呼び出されます。マップをクリックすると、マーカーが作成されますが、情報ウィンドウの情報はデータベースに保存されません。Google Maps Developer's Guide のガイドに従いましたが、まだ機能しません。MySQL のログイン情報が正しく機能することを確認するために 3 回もチェックしましたが、それでも何もありませんでした。

マップ自体のコードは次のとおりです。

    <!DOCTYPE html >
 <head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps JavaScript API v3 Example: Map Simple</title>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js? sensor=false"></script>
<script type="text/javascript">
var marker;
var infowindow;

function initialize() {
  var latlng = new google.maps.LatLng(37.4419, -122.1419);
  var options = {
    zoom: 13,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map-canvas"), options);
  var html = "<table>" +
             "<tr><td>Name:</td> <td><input type='text' id='name'/> </td> </tr>" +
             "<tr><td>Address:</td> <td><input type='text' id='address'/></td> </tr>" +
             "<tr><td>Type:</td> <td><select id='type'>" +
             "<option value='bar' SELECTED>bar</option>" +
             "<option value='restaurant'>restaurant</option>" +
             "</select> </td></tr>" +
             "<tr><td></td><td><input type='button' value='Save & Close'     onclick='saveData()'/></td></tr>";
infowindow = new google.maps.InfoWindow({
 content: html
});

google.maps.event.addListener(map, "click", function(event) {
    marker = new google.maps.Marker({
      position: event.latLng,
      map: map
    });
    google.maps.event.addListener(marker, "click", function() {
      infowindow.open(map, marker);
    });
});
}

function saveData() {
  var name = escape(document.getElementById("name").value);
  var address = escape(document.getElementById("address").value);
  var type = document.getElementById("type").value;
  var latlng = marker.getPosition();

  var url = "phpsqlinfo_addrow.php?name=" + name + "&address=" + address +
            "&type=" + type + "&lat=" + latlng.lat() + "&lng=" + latlng.lng();
  downloadUrl(url, function(data, responseCode) {
    if (responseCode == 200 && data.length <= 1) {
      infowindow.close();
      document.getElementById("message").innerHTML = "Location added.";
    }
  });
}

function downloadUrl(url, callback) {
  var request = window.ActiveXObject ?
      new ActiveXObject('Microsoft.XMLHTTP') :
      new XMLHttpRequest;

  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      request.onreadystatechange = doNothing;
      callback(request.responseText, request.status);
    }
  };

  request.open('GET', url, true);
  request.send(null);
}

function doNothing() {}
</script>
</head>

<body style="margin:0px; padding:0px;" onload="initialize()">
<div id="map-canvas" style="width: 500px; height: 300px"></div>
<div id="message"></div>
</body>

</html>

これは、情報をデータベースに保存することになっているものです(phpsqlinfo_addrow.php):

    <?php
require("phpsqlinfo_dbinfo.php");

// Gets data from URL parameters
$name = $_GET['name'];
$address = $_GET['address'];
$lat = $_GET['lat'];
$lng = $_GET['lng'];
$type = $_GET['type'];

// Opens a connection to a MySQL server
$connection=mysql_connect ("localhost", $username, $password);
if (!$connection) {
  die('Not connected : ' . mysql_error());
}

// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mysql_error());
}

// Insert new row with user data
$query = sprintf("INSERT INTO markers " .
     " (id, name, address, lat, lng, type ) " .
     " VALUES (NULL, '%s', '%s', '%s', '%s', '%s');",
     mysql_real_escape_string($name),
     mysql_real_escape_string($address),
     mysql_real_escape_string($lat),
     mysql_real_escape_string($lng),
     mysql_real_escape_string($type));

$result = mysql_query($query);

if (!$result) {
  die('Invalid query: ' . mysql_error());
}

?>
4

2 に答える 2

1

こんにちは、私は顧客の場所を保存するプロジェクトで同じ問題を抱えています。彼らはブラウザでクリックします。私がしたことは、場所を緯度と経度で 2 つの入力ボックスに保存したことです。送信ボタンを付けてフォームを送信するコードを指定しました。マップをクリックしてフォームを送信するように変更することもできます。これにより、クリックしてフォームを送信します。必要に応じて、緯度と経度を同じ列に保存することもできます。

キーを挿入する必要があります

document.getElementById("yourform").submit();



<html>
<head>
    <style type="text/css">
              #map_canvas {height:300px;width:500px}
    </style>
<script type="text/javascript" src="//maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&key=""""youerapikeyhere""""&language=mr"></script>
  <script type="text/javascript">
        var map;
        var marker;
        var markersArray = [];
        function initialize()
        {
            var latlng = new google.maps.LatLng(18.5236, 73.8478);
                var mapOptions = {
                zoom: 13,
                center: latlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
    google.maps.event.addListener(map, 'click', function(event) {
    if (marker) {
    marker.setMap(null);    //code          
    }
        //adding marker
    document.getElementById('txtLat').value=event.latLng.lat();
    document.getElementById('txtLng').value=event.latLng.lng();
      marker= new google.maps.Marker({
      position: event.latLng,
      map: map,
      title: 'pune'
  });
      //creting info window instance
      var infowindow = new google.maps.InfoWindow({
      content: 'selected location'
  });
      //adding pointer click event to open infowindow
    google.maps.event.addListener(marker, 'click', function() {
    infowindow.open(map,marker);
  });
  });
}
google.maps.event.addDomListener(window, 'load', initialize);
    </script>
</head>

        <table cellpadding="0" cellspacing="0">
            <tr><td colspan=3><div id="map_canvas" style="background-color: #ffffff"></div></td></tr>
            <tr><td><input type="text" id="txtLat" name="txtLat"style="width:150px"></td>
                <td><input type="text" id="txtLng" name="txtLng"style="width:150px"></td></tr>
        </table></form>
</html>`
于 2013-08-07T05:31:59.537 に答える
0

可能性を絞り込むか、少なくとも「どこで」問題が発生したかを見つけてください。つまり、問題の原因はフロントエンドかバックエンドか!?

Webkit UA (ブラウザー) またはそのバリアントを使用する場合は、その開発者ツールを使用してください。Firefox を使用している場合は、FireBug というアドオンをインストールします。マーカーのクリック ハンドラーで、alert() または console.log() を使用して座標を出力し、結果が正確に取得されるかどうかを確認します。次に、AJAX 呼び出しがバックエンドに渡される必要があるかどうかを確認します。

PHP で、(リクエスト パラメータからの) 着信値を調べてみてください。また、php.ini でデバッグ出力を有効にして、stderr またはシステム ログをチェックして DB 接続が正常に行われたかどうかを確認します。

うまくいかないことがたくさんあります。提供された詳細が不足しているため、判断が難しいですが、私の返信があなたの良いスタートに役立つことを願っています.

ああ、ところで、 mysql_ よりも PDO に切り替えることを強くお勧めします。 mysql_は将来廃止される予定です。

于 2013-08-17T17:46:12.250 に答える