如何使用`echo`混合使用PHP和JavaScript代码?

时间:2019-05-07 09:47:28

标签: javascript php

首先,我开始编码已经差不多一周了,所以即使有一些基本知识,我仍然缺少很多东西。我正在制作PWA,需要有人登录帐户时回显地图。帐户正在运行,从数据库获取信息正在运行,从而解决了我们遇到的问题。首先,我猜测echo内的脚本正在尝试从js文件中获取某些信息,但由于代码的编写方式而未能实现。在此处的此php代码中,所有内容都适用于其他地图示例,但我想根据自己的需要使用另一个更合适的地图。最后,当我运行站点时,即使整个过程都加载了,地图也不会显示。我目前正在猜测我使用“”或“”或导入命令的方式存在问题。我已经尝试了2天,现在更改代码中的内容,但似乎没有任何效果。希望我能为您提供所需的信息,并期待您的建议。

我尝试在脚本中使用“代替'。不起作用,因为它被识别为php代码。尝试在导入的” from“部分使用附加的',不使用bueno。尝试使用heredoc,但没有无法正常工作,原因是我收到“语法错误,页面结尾未预期”或某种某种形式,这可能意味着我做错了方法。将“”更改为insite归因和网址链接,原因是它被标记为//消息,否则被识别为“ php代码”。 这是我要使用的地图https://openlayers.org/en/latest/examples/xyz-esri.html

的链接
<?php
  $sql = "SELECT * FROM users WHERE uidUsers = '" . $_SESSION['userUid'] . "'";
  $result = mysqli_query($conn, $sql);
  $resultCheck = mysqli_num_rows($result);
  if ($resultCheck > 0) {
    while ($row = mysqli_fetch_assoc($result) ){
      $lon = $row['lon'];
      $lat = $row['lat'];
      $lonlat = $lon.", ".$lat;
      echo "<script type='text/javascript'>
    import Map from 'jsc/ol/Map.js';
    import View from 'jsc/ol/View.js';
    import TileLayer from 'jsc/ol/layer/Tile.js';
    import {fromLonLat} from 'jsc/ol/proj.js';
    import XYZ from 'jsc/ol/source/XYZ.js';
    var map = new Map({
        target: 'map',
        layers: [
          new TileLayer({
            source: new XYZ({
              attributions: 'Tiles © <a href=\"https://services.arcgisonline.com/ArcGIS/' +
                  'rest/services/World_Topo_Map/MapServer\">ArcGIS</a>',
              url: 'https://server.arcgisonline.com/ArcGIS/rest/services/' +
                  'World_Topo_Map/MapServer/tile/{z}/{y}/{x}'
            })
          })
        ],
        view: new View({
          center: fromLonLat([$lonlat]),
          zoom: 15
        })
      });
           </script>";
    }
  }
  ?>

2 个答案:

答案 0 :(得分:0)

尝试以下代码。与您的代码相同,除了,我在javascript开始之前关闭了PHP代码,在javascript结束之后重新打开了代码。在两次传递变量lonlat之间,我使用了符号<?= $lonlat ?>

注意这是未经测试的代码。

<?php
  $sql = "SELECT * FROM users WHERE uidUsers = '" . $_SESSION['userUid'] . "'";
  $result = mysqli_query($conn, $sql);
  $resultCheck = mysqli_num_rows($result);
  if ($resultCheck > 0) {
    while ($row = mysqli_fetch_assoc($result) ){
      $lon = $row['lon'];
      $lat = $row['lat'];
      $lonlat = $lon.", ".$lat;
      ?>
      <script type='text/javascript'>
    import Map from 'jsc/ol/Map.js';
    import View from 'jsc/ol/View.js';
    import TileLayer from 'jsc/ol/layer/Tile.js';
    import {fromLonLat} from 'jsc/ol/proj.js';
    import XYZ from 'jsc/ol/source/XYZ.js';
    var map = new Map({
        target: 'map',
        layers: [
          new TileLayer({
            source: new XYZ({
              attributions: 'Tiles © <a href='https://services.arcgisonline.com/ArcGIS/' +
                  'rest/services/World_Topo_Map/MapServer'>ArcGIS</a>',
              url: 'https://server.arcgisonline.com/ArcGIS/rest/services/' +
                  'World_Topo_Map/MapServer/tile/{z}/{y}/{x}'
            })
          })
        ],
        view: new View({
          center: fromLonLat([<?= $lonlat ?>]),
          zoom: 15
        })
      });
           </script>
    <?php
    }   // while loop ends
  } // closing if condition
  ?>

答案 1 :(得分:0)

设法使它起作用。使用了esri的ARCGIS地图以及geojson图层,以添加自定义要素。谢谢大家的尝试。