2012-11-15 237 views
-2

我製作了帶有API v3的Google Map,地址爲this tutorialGoogle Map API v3 MySQL?

.php爲從DB拉動的結果,你可以看到here

但與谷歌地圖搜索應用於回來了沒有結果,你可以看到here

當搜索位置時.html文件不會從數據庫中拉出標記。我已經完成了100次代碼,並在網上找到了我出錯的地方的答案。 如果有人可以爲這個問題帶來一些亮點,將不勝感激。

這裏是.PHP

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

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

// 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 address, name, 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); 

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

// 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("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(); 
?> 

這就是XML被撲滅當我搜索休斯敦,得克薩斯州在25英里半徑。

<?xml version="1.0"?> 
<markers><marker name="US Healthworks" address="9200 Hempstead, Houston, TX" lat="29.794104" lng="-95.449448" distance="5.34265857252369"/><marker name="Concentra Urgent Care" address="1000 N Post Oak, Houston, TX" lat="29.785303" lng="-95.456039" distance="5.47896700195167"/><marker name="US Healthworks" address="1414 S. Loop West, Houston, TX" lat="29.680426" lng="-95.399132" distance="5.79347704035615"/><marker name="Concentra Urgent Care" address="8799 North Loop E., Houston, TX" lat="29.797531" lng="-95.273872" distance="6.28265385500935"/><marker name="Doctor's Clinic Houston" address="6535 Southwest Freeway, Houston, TX" lat="29.717321" lng="-95.497299" distance="8.22610378379106"/><marker name="Northshore Occupational Medica" address="1140 Westmont Ste. 505, Houston, TX" lat="29.771984" lng="-95.195290" distance="10.4743938030692"/><marker name="US Healthworks" address="16630 Imperial, Houston, TX" lat="29.941263" lng="-95.396309" distance="12.615115596934"/><marker name="NOVA" address="6630 Roxburgh Drive, Houston, TX" lat="29.866304" lng="-95.555901" distance="13.371308778454"/><marker name="Fishbone Safety" address="208 X Street, Deer Park, TX" lat="29.694548" lng="-95.122627" distance="15.4859102039821"/><marker name="US Healthworks" address="17410 N.W. Freeway, Houston, TX" lat="29.888929" lng="-95.582146" distance="15.5495324355371"/><marker name="US Healthworks" address="10521 Corporate, Stafford, TX" lat="29.632973" lng="-95.596115" distance="16.2008784561048"/><marker name="Occupational Healthcare" address="610 S. Main Street, Highlands, TX" lat="29.808447" lng="-95.056885" distance="19.0351671183224"/><marker name="Medical Plaza Mobile Surveillance" address="10910 Spencer, La Porte, TX" lat="29.632973" lng="-95.062325" distance="20.4197847454651"/><marker name="US Healthworks" address="1309 West Fairmont Pkwy, LaPorte, TX" lat="29.651571" lng="-95.030998" distance="21.6516577038734"/></markers> 
+0

搜索框是否工作?當我點擊搜索按鈕時,它將我帶到海洋中央。 – Andrew

+0

這就是問題,我不知道爲什麼它不從數據庫拉標記信息。 .php文件本身就是,但使用.php文件的.html不是。 – NathanD

+0

從.php代碼返回的XML文檔的開頭處有一個空格字符。嘗試刪除該空間。如果你調試了'collection.html',你應該在第65行('var xml = parseXml(data)')中看到,由於錯誤,XML不能被解析:「第6行第1行出錯:允許XML聲明只在文檔開始處「 – Andrew

回答

0

通過你的PHP腳本返回的XML文檔格式不正確的,因爲它在第一行的XML聲明之前包含空格字符:

<?xml version="1.0"?> 
^ 
|-- This space character in front of the declaration is causing the problem. 

這引起了XML解析器失敗並出現錯誤:XML declaration allowed only at the start of the document

它可能來自PHP標籤<?php?>周圍的空白(包括空行)。

調試在collection.html線65後的xml變量,看該問題。我相信你可以通過在XML聲明之前刪除所有的空格來解決這個問題。 [Reference]


在另一方面,爲什麼地圖平移海洋中間的原因是因爲當沒有標記添加到地圖中,地圖被裝配到該範圍不擴大根本沒有達到線路78上的bounds.extend(latlng)

我建議修改searchLocationsNear()功能優雅地處理這種情況。


UPDATE:

在下面的評論中,我們討論瞭如何克服這個問題,在XML輸出空格。我想強調的是,最好的解決方案仍然是在擺脫源代碼的空間,這是在PHP腳本中。

JavaScript中的trim()函數沒有廣泛的瀏覽器支持(請參閱related SO question),並且確實只處理症狀,而不是解決問題的原因。

+0

感謝Andrew的所有評論。你能詳細說明一下嗎,我是一個自學成才的業餘愛好者(可能爲什麼我不能這樣做)。確切地說,你指的是什麼空白。 PLZ原諒我缺乏知識..我試圖學習:) – NathanD

+0

沒問題。我編輯了我的答案。這是導致XML解析器失敗的單個空格字符。 – Andrew

+0

我刪除了這些空格。他們沒有改變。搜索時,我剛在地圖上的Firefox中使用了一個調試。來找出它從數據庫中提取數據並正常工作。但它並沒有將它收到的數據應用到地圖上。所以,告訴我.php工作正常,而不是.html。糾正我,如果我錯了 – NathanD

0
<?php 
require("phpsqlajax_dbinfo.php");///this is ure db username password etc 

function parseToXML($htmlStr) 
{ 
$xmlStr=str_replace('<','&lt;',$htmlStr); 
$xmlStr=str_replace('>','&gt;',$xmlStr); 
$xmlStr=str_replace('"','&quot;',$xmlStr); 
$xmlStr=str_replace("'",'&#39;',$xmlStr); 
$xmlStr=str_replace("&",'&amp;',$xmlStr); 
return $xmlStr; 
} 

// 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()); 
} 



// Select all the rows in the markers table 
$query = "SELECT * FROM $tablename"; 
$result = mysql_query($query); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

header("Content-type: text/xml"); 

// Start XML file, echo parent node 
echo '<makers>'; 

// Iterate through the rows, printing XML nodes for each 
while ($row = @mysql_fetch_assoc($result)){ 
    // ADD TO XML DOCUMENT NODE 
    echo '<marker '; 
    echo 'name="' . parseToXML($row['name']) . '" '; 

    echo 'lat="' . $row['lat'] . '" '; 
    echo 'lng="' . $row['lng'] . '" '; 



    echo '/>'; 
} 

// End XML file 
echo '</markers>'; 
+0

你確定嗎?我得到一個帶有標記的XML文檔。 view-source:http://testforhealth.net/TCA/phpsqlsearch_genxml.php?lat = 33&lng = -86&radius = 50 – Andrew

+0

http://testforhealth.net/TCA/phpsqlsearch_genxml.php?lat=33&lng=-86&radius=50查看頁面源代碼,從數據庫中提取標記。但由於某種原因,我無法弄清楚.html不會從數據庫中提取標記。 – NathanD

+0

@ user1827526我不知道你是否只嘗試SQL?沒有工作嗎? – wf9a5m75