PHP 在 google 地图上显示多维数组值
PHP Display multi-dimentional array value on google map
任何人都可以帮助我,我对 PHP 很陌生,也许答案很明显。
我将用户详细信息和邮政编码存储在数据库中,然后我需要使用 javascript 在 google 地图上将邮政编码显示为标记(这是可行的)。
但我试图在 google 地图的信息 window 上显示每个用户数据,我只能显示结果的最后一行,所以所有信息 windows显示相同的记录,而不是该邮政编码的个别数据。
我想我需要结合以下两个查询,但我不知道如何结合。因为邮政编码需要内爆才能在地图上显示 "postcode"。
我想要实现的目标:
postcode need to be ("AA4 1DD", "AB1 5CD","CC4 1BBs");
infowindow (Fred, 7 street, AA4 1DD);
我在数据库中的内容:
name Fred Ann John
address 7 street 8 road 4 line
postcode AA4 1DD AB1 5CD CC4 1BB
PHP:
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$locations = $conn->prepare("SELECT postcode FROM tbl_data");
$locations->execute();
$lo= $locations->fetchAll(PDO::FETCH_COLUMN);
echo "'". $t = implode(' ,', $lo)."'";// working
//info window
$info_stmt = $conn->prepare("SELECT name, postcode FROM tbl_data, tbl_login WHERE tbl_data.user_id=tbl_login.user_id ");
$info_stmt->execute();
$result = $info_stmt -> fetchAll();
foreach( $result as $row ) {
echo $row[0];
/* echo "<pre>";
echo gettype($row[0]);
echo "</pre>";*/
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
die();
}
Javascript:
var addressArray = new Array(<?php echo "'". $t = implode("' ,'", $lo)."'"; ?>); //postcodes working
var geocoder = new google.maps.Geocoder();
for (var i = 0; i < addressArray.length; i++) {
geocoder.geocode( { 'address': addressArray[i]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
title: 'Click for more details'
});
//create info window
var infoWindow = new google.maps.InfoWindow({
content: "<p>Name: </p><?php echo $row[0].'<br />'.$row[1]; ?>"
});
您的问题在这里:
content: "<p>Food Name: </p><?php echo $row[0].'<br />'.$row[1]; ?>"
您不能像这样混合使用 JavaScript 和 PHP,并且 $row 不 - 或不应该 - 实际上存在于此上下文中,因为它不在 foreach
中声明或 - 如果这是一个单独的 JS 文件 - 你没有相应的上下文。
为了达到你的需要,我建议使用 AJAX 并设置一个 GET
请求到一个文件,然后 returns 一个数组,你可以在你的 JavaScript.
您可以阅读有关此 here 的文档。
注意,$row
应该这样使用:$row['ColumnName']
(不仅仅是为了可读性)。
例如:echo $row['address'];
示例代码 (PHP):
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$locations = $conn->prepare("SELECT postcode FROM tbl_data");
$locations->execute();
$lo= $locations->fetchAll(PDO::FETCH_COLUMN);
echo "'". $t = implode(' ,', $lo)."'";// working
//info window
$info_stmt = $conn->prepare("SELECT name, postcode FROM tbl_data, tbl_login WHERE tbl_data.user_id=tbl_login.user_id ");
$info_stmt->execute();
echo $info_stmt->fetchAll();
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
那么你的JavaScript:
$(document).ready(function () {
var output[];
$.get("phpfile.php")
.done(function(data) {
output = data;
});
});
output
现在是你所有results
的数组,可以使用了。
任何人都可以帮助我,我对 PHP 很陌生,也许答案很明显。
我将用户详细信息和邮政编码存储在数据库中,然后我需要使用 javascript 在 google 地图上将邮政编码显示为标记(这是可行的)。
但我试图在 google 地图的信息 window 上显示每个用户数据,我只能显示结果的最后一行,所以所有信息 windows显示相同的记录,而不是该邮政编码的个别数据。
我想我需要结合以下两个查询,但我不知道如何结合。因为邮政编码需要内爆才能在地图上显示 "postcode"。
我想要实现的目标:
postcode need to be ("AA4 1DD", "AB1 5CD","CC4 1BBs");
infowindow (Fred, 7 street, AA4 1DD);
我在数据库中的内容:
name Fred Ann John
address 7 street 8 road 4 line
postcode AA4 1DD AB1 5CD CC4 1BB
PHP:
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$locations = $conn->prepare("SELECT postcode FROM tbl_data");
$locations->execute();
$lo= $locations->fetchAll(PDO::FETCH_COLUMN);
echo "'". $t = implode(' ,', $lo)."'";// working
//info window
$info_stmt = $conn->prepare("SELECT name, postcode FROM tbl_data, tbl_login WHERE tbl_data.user_id=tbl_login.user_id ");
$info_stmt->execute();
$result = $info_stmt -> fetchAll();
foreach( $result as $row ) {
echo $row[0];
/* echo "<pre>";
echo gettype($row[0]);
echo "</pre>";*/
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
die();
}
Javascript:
var addressArray = new Array(<?php echo "'". $t = implode("' ,'", $lo)."'"; ?>); //postcodes working
var geocoder = new google.maps.Geocoder();
for (var i = 0; i < addressArray.length; i++) {
geocoder.geocode( { 'address': addressArray[i]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
title: 'Click for more details'
});
//create info window
var infoWindow = new google.maps.InfoWindow({
content: "<p>Name: </p><?php echo $row[0].'<br />'.$row[1]; ?>"
});
您的问题在这里:
content: "<p>Food Name: </p><?php echo $row[0].'<br />'.$row[1]; ?>"
您不能像这样混合使用 JavaScript 和 PHP,并且 $row 不 - 或不应该 - 实际上存在于此上下文中,因为它不在 foreach
中声明或 - 如果这是一个单独的 JS 文件 - 你没有相应的上下文。
为了达到你的需要,我建议使用 AJAX 并设置一个 GET
请求到一个文件,然后 returns 一个数组,你可以在你的 JavaScript.
您可以阅读有关此 here 的文档。
注意,$row
应该这样使用:$row['ColumnName']
(不仅仅是为了可读性)。
例如:echo $row['address'];
示例代码 (PHP):
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$locations = $conn->prepare("SELECT postcode FROM tbl_data");
$locations->execute();
$lo= $locations->fetchAll(PDO::FETCH_COLUMN);
echo "'". $t = implode(' ,', $lo)."'";// working
//info window
$info_stmt = $conn->prepare("SELECT name, postcode FROM tbl_data, tbl_login WHERE tbl_data.user_id=tbl_login.user_id ");
$info_stmt->execute();
echo $info_stmt->fetchAll();
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
那么你的JavaScript:
$(document).ready(function () {
var output[];
$.get("phpfile.php")
.done(function(data) {
output = data;
});
});
output
现在是你所有results
的数组,可以使用了。