我目前正在大学开展一个涉及抽样价值的项目 (CO2,温度,湿度......)到带有Raspberry Pi的SQLite3数据库,并使用Web界面显示数据。 我对php / html相当新,但我对理解代码的作用没有任何问题。
我已经找到了一个german tutorial,描述了如何创建一个php / html脚本,该脚本从SQLite数据库导入数据并使用Google Graphs来显示它。我使用提供的代码作为我脚本的基础。
这是我到目前为止所做的:
<?php
require_once("config.php");
require_once("functions.php");
//------------------------ PHP Settings ----------------------------------------
ini_set('track_errors', 1);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set("memory_limit","64M");
ini_set("max_execution_time","30");
@ob_implicit_flush(true);
@ob_end_flush();
$_SELF=$_SERVER['PHP_SELF'];
$SQL="SELECT CO2, Temperature FROM value";
$db = db_con($DBfile);
$q = db_query($SQL);
$data = "var data = new google.visualization.DataTable();<br>"
."data.addColumn('number', 'CO2');<br>"
."data.addColumn('number', 'Temperature');<br><br>"
."data.addRows([<br>";
while ($res = $q->fetch(PDO::FETCH_ASSOC)) {
$temp = (int)$res['Temperature'];
$co2 = (int)$res['CO2'];
$data = $data." [".$temp.", ".$co2."],<br>";
}
$data = $data."]);<br>";
//Print data to check if data from database is loaded
echo $data;
?>
<html>
<head>
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></sc$
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
<?php echo $data; ?>
var options = {
title: 'Air Quality',
curveType: 'function',
legend: { position: 'bottom' }
};
var chart = new google.visualization.LineChart(document.getElementById('temp_curve_chart'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="temp_curve_chart" style="width: 900px; height: 500px"></div>
</body>
</html>
现在的问题是,图表没有显示出来。
如果我添加echo $data;
变量的内容会显示在浏览器中,这意味着导入部分正在运行,但我无法让它显示图形。
var data = new google.visualization.DataTable();
data.addColumn('number', 'CO2');
data.addColumn('number', 'Temperature');
data.addRows([
[23, 500],
[23, 500],
[25, 600],
]);
我怀疑它与以下代码行或$ data变量的设置方式有关:
function drawChart() {
<?php echo $data; ?>
如果我将其替换为示例provided by Google中的代码,则会很好地显示图表。
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]
]);
var options = {
title: 'Company Performance',
curveType: 'function',
legend: { position: 'bottom' }
};
我已经花了好几个小时试图让它发挥作用,但我无法做到。
非常感谢任何帮助/提示!
提前致谢!
答案 0 :(得分:1)
我发现了两件事:
首先是这一行
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></sc$
必须是
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
其次删除所有
<br>
在您的JavaScript中使用\n\r
替换(不是必需的,因为它只是源代码中的视觉效果)
像
$data = "var data = new google.visualization.DataTable();\n\r"
."data.addColumn('number', 'CO2');\n\r"
."data.addColumn('number', 'Temperature');\n\r\n\r"
."data.addRows([\n\r";
while ($res = $q->fetch(PDO::FETCH_ASSOC)) {
$temp = (int)$res['Temperature'];
$co2 = (int)$res['CO2'];
$data = $data." [".$temp.", ".$co2."],\n\r";
}
$data = $data."]);\n\r";
你会得到一张漂亮的图表!