2014-10-28 106 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