使用js变量

时间:2016-11-15 18:53:49

标签: javascript php json charts

首先我道歉我是一个总菜鸟,甚至更多的菜鸟在js。我用php编写代码。

我通过谷歌找到了这个漂亮的饼图 https://developers.google.com/chart/interactive/docs/gallery/piechart

我试图用我自己的数据构建它(从带有PHP的SQL并转换成php)

我的问题是,Js似乎接受我的变量作为表的数据,我不知道为什么。 这是我的代码 *我有3个php变量转换为js($ num_ra1到var countra1)等)

请任何帮助都很好,我花了很多时间试图做这项工作。 Chrome工具也会发送此错误:未捕获错误:类型不匹配。值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>

编辑2016-11-17 22h21发现解决方案:  我只是想为可能有问题的其他用户更新此信息。我找到了解决方案,实际上json_encode认为代码是文本,他把“变量”的值放在“围绕php变量的值,因为我自己已经在PHP代码周围放了一些”,php变量返回的数字是两个双引号之间:“”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时。 chrome devtool告诉我它'''缺失了。如果有人看到了什么,请告诉我!

2 个答案:

答案 0 :(得分:0)

我尝试使用数值替换countra1,countrf2,countni3并运行代码来运行代码。

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

答案 1 :(得分: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