为了账号安全,请及时绑定邮箱和手机立即绑定

echo 语句不起作用?似乎格式正确

echo 语句不起作用?似乎格式正确

PHP
繁星淼淼 2021-07-06 13:19:57
我正在用 PHP 的 javascript echo'd 创建一个对象,语法似乎是正确的,但它给了我一个错误。我传递给对象的变量是字符串,我尝试将它们放在引号等中。我也尝试创建一个 JS 函数来执行此操作,并且得到了类似的结果。<?PHP $TEDS = $db->query("SELECT a.*FROM TEDS a");//Add each TED location into a javascript array.echo '<script type="text/javascript">';while($TED = $TEDS->fetch_assoc()){   echo 'var pos = {lat: '.$TED['latitude'].', lng: '.$TED['longitude'].'};'; //THIS ECHO STATEMENT IS THE ONE GIVING ME PROBLEMS.}echo '</script>';?>
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

您的纬度值之一很可能没有值,导致它打印如下内容:


var pos = {lat:  , lng: 1234}

如果属性没有值,JavaScript 解析器会意外地看到逗号。这将极大地解释意外的逗号语法错误。


因此,首先,您不要手动构建 JSON。PHP 具有json_encode()将 PHP 数组转换为 JSON 的功能。使用它为您正确构建 JSON。


接下来,您的代码会pos重复打印,覆盖之前的值。如果您只关心最后一个值,请不要打印所有内容。如果您确实关心所有值,请将它们存储在一个数组中:


<?php

// Get your TEDS

$teds = $TEDS->fetch_assoc();


// Using array_map to convert the items from latitude-longitude to lat-lng.

$teds_array = array_map(function($ted) {

  return ['lat' => $ted['latitude'], 'lng' => $ted['longitude']];

}, $teds);


// Serialize to JSON

$teds_json = json_encode($teds_array);

?>


// positions will be an array of objects with lat-lng.

var positions = <?php echo $teds_json; ?>

最后,小心XSS。不要像上面那样只打印未经处理的值。在页面上打印之前,请确保您的数据是干净的。


查看完整回答
反对 回复 2021-07-16
?
大话西游666

TA贡献1817条经验 获得超14个赞

我会尝试在循环之后写出全文。这样你就可以构建一个完整的 json 数组:


<?PHP 


$TEDS = $db->query("

SELECT a.*

FROM TEDS a

");

//Add each TED location into a javascript array.


echo '<script type="text/javascript">';

$text = 'var positions = [';

while($TED = $TEDS->fetch_assoc()) {

   $text .= '{lat: '.$TED['latitude'].', lng: '.$TED['longitude'].'},';

}

// remove last comma

$text = substr($text,0 , strlen($text)-2);

$text .= '];'

echo $text;

echo '</script>';


?>

另一种方法是将json_decode($TED).


查看完整回答
反对 回复 2021-07-16
  • 2 回答
  • 0 关注
  • 269 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信