首先我道歉我是一个总菜鸟,甚至更多的菜鸟在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告诉我它'''缺失了。如果有人看到了什么,请告诉我!
答案 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;