2016-11-15 57 views
0

首先我appologize我是一个总noob,甚至更多noob在js。我使用PHP代码。谷歌饼图使用js变量

我发现这个漂亮的饼图由谷歌 https://developers.google.com/chart/interactive/docs/gallery/piechart

我试着用自己的数据来构建它(把从PHP SQL,并转换成PHP)

我的问题是的js dosent似乎接受我的变量作为表的数据,我不知道为什么。 这里是我的代码 *我已转换为JS 3 PHP变量($ num_ra1为VAR countra1)等)

请任何帮助,将是很好的,我把大量的时间努力使这项工作。 此外铬工具发送此错误:未捕获错误:类型不匹配。值17不在列索引1 在gvjs_Ll

码匹配类型号: PHP和SQL发现

<?php 
$hostname='mysql:host=localhost;dbname=secure_login'; 
$username='root'; 
$password='root'; 
$tbl_2='econo1'; 
//create PDO connection 
try { 
$dbh = new PDO($hostname,$username,$password); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
// to get the data 
$sql_ra1="SELECT COUNT(reduire_affecte1) AS ra1 FROM econo1 WHERE reduire_affecte1 != 0"; 
$sql_rf2="SELECT COUNT(reduire_facon2) AS rf2 FROM econo1 WHERE reduire_facon2 != 0"; 
$sql_ni3="SELECT COUNT(non_important3) AS ni3 FROM econo1 WHERE non_important3 != 0"; 

$result_ra1=$dbh->prepare($sql_ra1); 
$result_ra1->execute(); 


$result_rf2=$dbh->prepare($sql_rf2); 
$result_rf2->execute(); 

//$count_rf2=$result_rf2->fetch(PDO::FETCH_ASSOC); (pending) 

$result_ni3=$dbh->prepare($sql_ni3); 
$result_ni3->execute(); 

//$count_ni3=$result_ni3->fetch(PDO::FETCH_ASSOC); (pending) 
} 
//To hide the password if error 
catch (Exception $e) { 
     die('Erreur : ' . $e->getMessage()); 
} 

while ($count_ra1=$result_ra1->fetch(PDO::FETCH_OBJ)) 
{ 
    $num_ra1=$count_ra1->ra1; 
} 

while ($count_rf2=$result_rf2->fetch(PDO::FETCH_OBJ)) 
{ 
    $num_rf2=$count_rf2->rf2; 
} 

while ($count_ni3=$result_ni3->fetch(PDO::FETCH_OBJ)) 
{ 
    $num_ni3=$count_ni3->ni3; 
} 

<!DOCTYPE html> 
 
<html> 
 
  <head> 
 
<meta charset="utf-8"> 
 
    <!--Load the AJAX API--> 
 
    <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
 
    <script type="text/javascript"> 
 

 
          // Load the Visualization API and the piechart package. 
 
      google.load('visualization', '1.0', {'packages':['corechart']}); 
 

 
      // Set a callback to run when the Google Visualization API is loaded. 
 
      google.setOnLoadCallback(drawChart); 
 

 
      // Callback that creates and populates a data table, 
 
      // instantiates the pie chart, passes in the data and 
 
      // draws it. 
 
// get the php result 
 
var countra1="<?php echo json_encode($num_ra1); ?>"; 
 
var countrf2="<?php echo json_encode($num_rf2); ?>"; 
 
var countni3="<?php echo json_encode($num_ni3); ?>"; 
 
      function drawChart() { 
 

 
      // Create the data table. 
 
      var data = new google.visualization.DataTable(); 
 
      data.addColumn('string', 'Réponse'); 
 
      data.addColumn('number', 'Choix'); 
 
      data.addRows([ 
 
        ['reduire affecter', countra1], 
 
        ['reduire façon', countrf2], 
 
        ['non important', countni3], 
 
      ]); 
 

 
// Set chart options 
 
      var options = {'title':'votre opinion', 
 
                     'width':400, 
 
                     'height':300}; 
 

 
      // Instantiate and draw our chart, passing in some options. 
 
      var chart = new google.visualization.PieChart(document.getElementById('chart_div')); 
 
      chart.draw(data, options); 
 
    } 
 
    </script> 
 
  </head> 
 

 
  <body> 
 
<!--Div that will hold the pie chart--> 
 
    <div id="chart_div" style="width:400; height:300"></div> 
 
  </body> 
 
</html>

EDIT二○一六年十一月十七日22h21解决方案: 我只是想为可能有问题的其他用户更新此信息。我找到了解决方案,实际上json_encode认为代码是文本,他把“”变量放在php变量的值的周围,因为我自己已经在php代码中放了一些“”,php变量返回的数字是之间2双引号:“”10“”所以js是把它作为一个非数字值。解决方案:删除我的双引号。 现在一切完美

var countra1=parseInt(<?php echo json_encode($num_ra1); ?>) || 0; 
 
var countrf2=parseInt(<?php echo json_encode($num_rf2); ?>) || 0; 
 
var countni3=parseInt(<?php echo json_encode($num_ni3); ?>) || 0;

现在我的问题似乎在70%需要解决,唯一缺少的一块是在语法错误。我想它在使用parseInt。铬devtool告诉我它'''失踪。如果有人看到了什么,请让我知道!

回答

0

如果您可以提供总是数字 - 删除引号。

用途:

var countni3=<?php echo json_encode($num_ni3); ?>; 

或者,如果你不知道:

var countni3=parseInt("<?php echo json_encode($num_ni3); ?>") || 0; 

例子:

var countra1=parseInt("<?php $num_ra1 = 10; echo json_encode($num_ra1); ?>") || 0; 
var countrf2=parseInt("<?php $num_rf2 = 20; echo json_encode($num_rf2); ?>") || 0; 
var countni3=parseInt("<?php $num_ni3 = 30; echo json_encode($num_ni3); ?>") || 0; 

example output

+0

相关答案:[parseInt](http://stackoverflow.com/a/6736521/1641867)。或者保留字符串并使用[对象作为值](http://stackoverflow.com/a/24367948/1641867) – ventiseis

+0

我认为你的第二个解决方案或者至少是其中的一部分有很好的解决方案。现在,当我进入铬的devtools时,我会看到我的anwser的数值。我真的不明白为什么导致我的变量只是colomn的数量的计数,所以它不能是数字以外的任何数字。但我仍然有以下问题:它似乎是一个')'在参数列表后缺少(这就是devtool告诉我的)。你能否告诉我他们是否是“)”缺失,我复制粘贴你的行,如果你能向我解释我想了解的代码的结尾。谢谢 –

+0

我没有看到错误。我复制了这个问题的代码并添加了一个示例变量声明。一切正常(见截图)。 [来源于Pastebin](http://pastebin.com/cLi0ybfb),用过[PhpFiddle](http://phpfiddle.org/) – ventiseis

0

我试着用数值代替countra1,countrf2,countni3来运行你的代码,代码工作。

请检查countra1,countrf2,countni3的值是否为数字。

+0

是的,你是正确的代码工作很好地数值。 countra1(和其他)是从$ php变量提取作为$ num_ra1等,这些PHP变量从SQL中提取。当我尝试回显$ num_ra1的结果时,输出工作和是,它的数字。这就是为什么我不明白,我的猜测是问题来自我在js中使用变量的方式。 –