【问题标题】:PHP Script fetching only first row of address field from the MySQL databasePHP 脚本仅从 MySQL 数据库中获取地址字段的第一行
【发布时间】:2013-11-04 14:33:11
【问题描述】:

我正在构建一个页面,从数据库中获取地址并显示所有位置,但代码仅显示数据库中的第一个地址字段。 我什至搜索了谷歌和所有相关的问题g,但似乎没有任何效果。

作为输出,我在地址字段中获得了第一个位置,并且该位置正在显示在谷歌地图上。 我需要做的是从数据库中的地址字段中获取所有地址行并将它们显示在谷歌地图上(多个标记)。

有什么方法可以让我获取所有地址并将它们存储在数据库中的数组中,并在谷歌地图上显示来自“var address”的这些地址。

任何人都可以帮助我对这个概念不熟悉。

      <!DOCTYPE html>
      <html>
      <head>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      <title>Google Maps Multiple Markers</title>
      <? 
      error_reporting(0);
     include('dbcon.php');
     $result = mysql_query("SELECT address FROM markers");
     $new_array = array();
     while ($row = mysql_fetch_assoc($result)) {
     $new_array[] = $row['address'];  
     }

    $add_js = json_encode( $new_array );
     ?>
    <script
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script src="http://maps.google.com/maps/api/js?sensor=false"
    type="text/javascript"></script>
    </head>
    <body>
    <div id="map" style="width: 500px; height: 400px;"></div>
    <script type="text/javascript">
    var side_bar_html = "";
    var icon1 = "prop.png";
        var icon2 = "build.png";
        var locations = <?php echo $add_js ?>;
    //alert(locations);        
    function geocodeAddress(i) {
            geocoder.geocode(
                        {
                            'address' : locations[i]
                        },
                        function(results, status) {
                            if (status == google.maps.GeocoderStatus.OK) {
                                map.setCenter(results[0].geometry.location);
                                createMarker(results[0].geometry.location, i);
                            } else {
                                alert('Geocode was not successful for the 
                              following   reason: '
                                        + status);
                            }
                        });
                      }   

       function createMarker(latlng,i) {
       var marker = new google.maps.Marker({
                                    map : map,
                    icon : icon1,
                                    position : latlng
                                });

                 //add info window

              google.maps.event.addListener(marker, 'mouseover', function() {
               marker.setIcon(icon2);
           infowindow.setContent(locations[i]);
           infowindow.open(map, marker);
           title: 'Property!'
                });

       google.maps.event.addListener(marker, 'mouseout', function() {
              marker.setIcon(icon1);
              infowindow.setContent(locations[i]); 
              infowindow.close(map, marker);
              title: 'Property!' 
         });

             //end of adding info window

             return marker;
              }


              var map = new google.maps.Map(document.getElementById('map'), {
              zoom : 10,
              center : new google.maps.LatLng(28.6139, 77.2089),
              mapTypeId : google.maps.MapTypeId.ROADMAP
              });

             var infowindow = new google.maps.InfoWindow({
                     size: new google.maps.Size(150,50)});

             var geocoder = new google.maps.Geocoder();

             for (var i = 0; i < locations.length; i++) {
              geocodeAddress(i);

             }//end of for loop
            </script>

            </body>
           </html>

【问题讨论】:

  • 这个问题似乎与your previous one 非常相似。这些问题之一应该被关闭
  • @ducan 我已经删除了这个问题先生。
  • 我的代码现在可以工作,所以我更新了正确的代码!

标签: javascript php google-maps google-maps-api-3 google-maps-markers


【解决方案1】:

线

while($add[]=mysql_fetch_row($sql));

从 SQL 结果中获取尽可能多的行并将它们放入一个数组中;你会得到一个由列组成的数组。

PHP 中的数组没有自动将它们转换为字符串的内置方法,这将在&lt;?=$add?&gt; 行中发生。您需要循环遍历它们并单独打印数组中的每个项目,或者使用implode等方法将它们转换为字符串。

我怀疑您想要做的是使用诸如

之类的查询从数据库中获取单个地址

SELECT address FROM markers LIMIT 1

然后做一些类似的事情:

 $sql=(mysql_query("SELECT address FROM markers LIMIT 1"));

 $addressParts = mysql_fetch_row($sql);

 $add = ($addressParts && count($addressParts)) ? $addressParts[0] : '';

这可能会实现您想要实现的目标 - 从数据库加载单个地址并将其注入您的 JavaScript。

【讨论】:

  • 感谢您的回复。这解决了地址问题,但它只是从数据库中获取第一个地址,并在 gmap 上显示单个(第一个)地址。
  • 从数据库列中获取所有行值的方法是什么,以便我在脚本中传递该值以显示多个标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多