2017-06-19 9 views
1

ここでは、ユーザが希望する場所を検索できるようにするPHPファイル と例:20km、メーカーとこれは私のPHPファイルデータベースを正しくすべて私がそれを直接割り当てる場合は、距離とマーカーがすべての近くの場所を示していますが、私はそれを検索する価値がありますドレスコードと何も表示されないように助けてください何が起こっている私のコードで....デバッグに役立ちます。私は4日間試してみますが、ポイントを取得します。,,,,, latおよびlngに直接値を割り当てます。半径は表示されますが、検索できない場合は私はlatとlngを直接割り当てると自分のコードが間違っていると近くの場所に表示されます

 <body style="margin:0px; padding:0px;" onload="initMap()"> 
    <div> 
     <label for="raddressInput">Search location:</label> 
     <input type="text" id="addressInput" size="15"/> 
     <label for="radiusSelect">Radius:</label> 
     <select id="radiusSelect" label="Radius"> 
      <option value="50" selected>50 kms</option> 
      <option value="30">30 kms</option> 
      <option value="20">20 kms</option> 
      <option value="10">10 kms</option> 
     </select> 

     <input type="button" id="searchButton" value="Search"/> 
    </div> 
    <div><select id="locationSelect" style="width: 10%; visibility: hidden"></select></div> 
    <div id="map" style="width: 100%; height: 90%"></div> 
    <script> 
     var map; 
     var markers = []; 
     var infoWindow; 
     var locationSelect; 

     function initMap() { 
      var sydney = {lat: -33.863276, lng: 151.107977}; 
      map = new google.maps.Map(document.getElementById('map'), { 
      center: sydney, 
      zoom: 11, 
      mapTypeId: 'roadmap', 
      mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU} 
      }); 
      infoWindow = new google.maps.InfoWindow(); 

      searchButton = document.getElementById("searchButton").onclick = searchLocations; 

      locationSelect = document.getElementById("locationSelect"); 
      locationSelect.onchange = function() { 
      var markerNum = locationSelect.options[locationSelect.selectedIndex].value; 
      if (markerNum != "none"){ 
       google.maps.event.trigger(markers[markerNum], 'click'); 
      } 
      }; 
     } 

     function searchLocations() { 
     var address = document.getElementById("addressInput").value; 
     var geocoder = new google.maps.Geocoder(); 
     geocoder.geocode({address: address}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
      searchLocationsNear(results[0].geometry.location); 
      } else { 
      alert(address + ' not found'); 
      } 
     }); 
     } 

     function clearLocations() { 
     infoWindow.close(); 
     for (var i = 0; i < markers.length; i++) { 
      markers[i].setMap(null); 
     } 
     markers.length = 0; 

     locationSelect.innerHTML = ""; 
     var option = document.createElement("option"); 
     option.value = "none"; 
     option.innerHTML = "See all results:"; 
     locationSelect.appendChild(option); 
     } 

     function searchLocationsNear(center) { 
     clearLocations(); 

     var radius = document.getElementById('radiusSelect').value; 
     var searchUrl = 'storelocator.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius; 
     downloadUrl(searchUrl, function(data) { 
      var xml = parseXml(data); 
      var markerNodes = xml.documentElement.getElementsByTagName("marker"); 
      var bounds = new google.maps.LatLngBounds(); 
      for (var i = 0; i < markerNodes.length; i++) { 
      var id = markerNodes[i].getAttribute("id"); 
      var name = markerNodes[i].getAttribute("name"); 
      var address = markerNodes[i].getAttribute("address"); 
      var distance = parseFloat(markerNodes[i].getAttribute("distance")); 
      var latlng = new google.maps.LatLng(
        parseFloat(markerNodes[i].getAttribute("lat")), 
        parseFloat(markerNodes[i].getAttribute("lng"))); 

      createOption(name, distance, i); 
      createMarker(latlng, name, address); 
      bounds.extend(latlng); 
      } 
      map.fitBounds(bounds); 
      locationSelect.style.visibility = "visible"; 
      locationSelect.onchange = function() { 
      var markerNum = locationSelect.options[locationSelect.selectedIndex].value; 
      google.maps.event.trigger(markers[markerNum], 'click'); 
      }; 
     }); 
     } 

     function createMarker(latlng, name, address) { 
      var html = "<b>" + name + "</b> <br/>" + address; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: latlng 
      }); 
      google.maps.event.addListener(marker, 'click', function() { 
      infoWindow.setContent(html); 
      infoWindow.open(map, marker); 
      }); 
      markers.push(marker); 
     } 

     function createOption(name, distance, num) { 
      var option = document.createElement("option"); 
      option.value = num; 
      option.innerHTML = name; 
      locationSelect.appendChild(option); 
     } 

     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 parseXml(str) { 
      if (window.ActiveXObject) { 
      var doc = new ActiveXObject('Microsoft.XMLDOM'); 
      doc.loadXML(str); 
      return doc; 
      } else if (window.DOMParser) { 
      return (new DOMParser).parseFromString(str, 'text/xml'); 
      } 
     } 

     function doNothing() {} 
    </script> 
    <script async defer 
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyA5fMEMuSoW1_1qchnyPvZCDt8ug4mbP98&callback=initMap"> 
    </script> 
    </body> 




<?php 

require("phpsqlsearch_dbinfo.php"); 

// Get parameters from URL 
$center_lat = $_GET["lat"]; 
$center_lng = $_GET["lng"]; 
$radius = $_GET["radius"]; 

// but if i assign it directly it will show up all nearby place and distance; 
/* $center_lat = -33.737885 ; 
     $center_lng = 151.235260; 
     $radius = 20;*/ 


// Start XML file, create parent node 
$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 
// 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()); 
} 
// Search the rows in the markers table 
$query = sprintf("SELECT id, name, address, lat, lng, (3959 * acos(cos(radians('%s')) * cos(radians(lat)) * cos(radians(lng) - radians('%s')) + sin(radians('%s')) * sin(radians(lat)))) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20", 
    mysql_real_escape_string($center_lat), 
    mysql_real_escape_string($center_lng), 
    mysql_real_escape_string($center_lat), 
    mysql_real_escape_string($radius)); 
$result = mysql_query($query); 
$result = mysql_query($query); 

if (!$result) { 
    die("Invalid query: " . mysql_error()); 
} 
header("Content-type: text/xml"); 
// Iterate through the rows, adding XML nodes for each 
while ($row = @mysql_fetch_assoc($result)){ 
    $node = $dom->createElement("marker"); 
    $newnode = $parnode->appendChild($node); 
    $newnode->setAttribute("id", $row['id']); 
    $newnode->setAttribute("name", $row['name']); 
    $newnode->setAttribute("address", $row['address']); 
    $newnode->setAttribute("lat", $row['lat']); 
    $newnode->setAttribute("lng", $row['lng']); 
    $newnode->setAttribute("distance", $row['distance']); 
} 
echo $dom->saveXML(); 

?> 

答えて

1

あなたはこのことを書きましたn番目前、これはまだ関連性があるかどうかはわかりませんが、あなたはタイプミスがあります。あなたのラベルのために、それは次のようになります。

<div> 
    <label for="addressInput">Search location:</label> 
    <input type="text" id="addressInput" size="15"/> 
    [etc.] 
</div> 

それはあなたの問題だったかどうかは知りませんが、それは誤りまたは2を投げる必要があります。

関連する問題