2014-10-28 113 views
0

我想用dxcharts制作一些图表。现在,我有以下情况:在javascript中添加php var

我的SQL查询:

$sql = "SELECT 
av.art_title, 
SUM(CASE c.cont_status WHEN 'cold' THEN av.art_views ELSE 0 END) cold, 
SUM(CASE c.cont_status WHEN 'lead' THEN av.art_views ELSE 0 END) lead, 
SUM(CASE c.cont_status WHEN 'prospect' THEN av.art_views ELSE 0 END) prospect, 
SUM(CASE c.cont_status WHEN 'lost' THEN av.art_views ELSE 0 END) lost 
FROM article_views av 
JOIN contacts c ON av.user_id = c.id 
GROUP BY av.art_title"; 
$res = mysql_query($sql) or die (mysql_error()); 

我有一个while循环,像查询:

while($row = mysql_fetch_assoc($res)) { } 

而且下面我会后我的JavaScript变种:

var dataSource = [{ country: "<?php echo $row['art_title']; ?>", lead: <?php echo $row['lead']; ?>, lost: <?php echo $row['lost']; ?>}, ]; 

因此,如果我在数据源var使用while,它根本不工作。 任何人都可以帮助我吗?

+0

您使用的是内嵌JavaScript吗? – 2014-10-28 20:23:13

+1

您正在将PHP文本转储到JS上下文中 - 您很容易受到JS注入攻击的JS攻击。 **总是**通过'json_encode()'输出,以便生成语法正确的JS字符串。 – 2014-10-28 20:24:23

+0

它是拼写'art_titel'吗?而不是'art_title' – vaso123 2014-10-28 20:24:38

回答

1
$data=array(); 
while ($row = mysql_fetch_assoc($res)){ 
    $data[]=array('country'=> $row['art_title'], 'lead'=> $row['lead'], 'lost'=> $row['lost']); 
} 
$json=json_encode($data); 

//javascript 
var dataSource=<?php echo $json; ?>; 
+0

这不起作用。我有这在我的javascript:var dataSource = <?php echo $ json; ?>但我没有括号[]是这个问题吗? – 2014-10-28 21:18:49

+0

生成的输出是什么样的?你是否在控制台上发现任何js错误? – Steve 2014-10-28 22:53:54

+0

图表不显示。目前为止我没有发现任何错误。 – 2014-10-29 08:40:35

0

顺便说一句,原来的MySQL扩展现在已经过时http://php.net/manual/en/migration55.deprecated.php,并连接到数据库时,会产生E_DEPRECATED错误。而是使用MySQLi(或PDO_MySQL)扩展。

E_DEPRECATED错误不会显示在生产服务器上,但它仍会生成,并且需要时间。

因此while循环将看起来像:

while ($row = $result -> fetch_array (MYSQLI_ASSOC)) { ... }

如果你写一个新的PHP应用程序, - 可用MySQLi。

+0

谢谢。我会牢记这一点。 – 2014-10-28 21:46:14