ChartJS |如何使用MySQL表和PHP中的数据绘制折线图
时间:2020-02-23 14:45:50 来源:igfitidea点击:
在本教程中,我们将学习使用MySQL表和PHP中的数据绘制线形图。
前提条件
我们将需要以下各项来完成本教程。
- 文本编辑器(例如SublimeText,TextMate,Coda,NotePad ++)或者IDE(例如Eclipse)
- Web浏览器,例如Chrome或者Firefox
- 本地主机上的PHP开发环境。
为此,您可以使用XAMPP(Windows/Linux/OS X用户)或者MAMP(Windows/OS X用户) - MySQL
- ChartJS
- jQuery的
所以开始吧...
MySQL表
在本教程中,我们将考虑一个非常简单的关注者表,该表具有四列userid,facebook,twitter,googleplus和3个条目。
followers表
CREATE TABLE `followers` (
`userid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`facebook` INT(11) DEFAULT '0',
`twitter` INT(11) DEFAULT '0',
`googleplus` INT(11) DEFAULT '0',
PRIMARY KEY (`userid`)
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
followers表数据
INSERT INTO `followers` VALUES (1, 100, 200, 80), (2, 60, 150, 180), (3, 50, 90, 120);
创建一个新项目
创建一个新的项目文件夹,并将其命名为chartjs。
注意!根据您的选择随意命名您的项目。
在chartjs项目文件夹中,创建一个子文件夹并将其命名为js。
这将保存所有的javascript文件。
在js文件夹中移动JS文件
将Chart.min.js和jquery.min.js文件复制到我们在chartjs项目文件夹中创建的js文件夹中。
并在js文件夹中创建一个linegraph.js文件。
这将包含我们将为此项目编写的所有javascript代码。
创建followersdata.php文件以从MySQL表中获取数据
在chartjs文件夹中创建一个新文件followersdata.php。
该文件将包含php代码,该代码将从followers表中获取数据并以JSON格式显示。
档案:followersdata.php
<?php
//setting header to json
header('Content-Type: application/json');
//database
define('DB_HOST', '127.0.0.1');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'root123');
define('DB_NAME', 'mydb');
//get connection
$mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
if(!$mysqli){
die("Connection failed: " . $mysqli->error);
}
//query to get data from the table
$query = sprintf("SELECT userid, facebook, twitter, googleplus FROM followers");
//execute query
$result = $mysqli->query($query);
//loop through the returned data
$data = array();
foreach ($result as $row) {
$data[] = $row;
}
//free memory associated with result
$result->close();
//close connection
$mysqli->close();
//now print the data
print json_encode($data);
followersdata.php文件的输出
要获取data.php文件的输出,请在网络浏览器(例如Chrome)中将其打开
网址:localhost/chartjs/followersdata.php
[
{
"userid" : "1",
"facebook" : "100",
"twitter" : "200",
"googleplus" : "80"
},
{
"userid" : "2",
"facebook" : "60",
"twitter" : "150",
"googleplus" : "180"
},
{
"userid" : "3",
"facebook" : "50",
"twitter" : "90",
"googleplus" : "120"
}
]
创建linegraph.html文件以显示折线图
现在,在chartjs项目文件夹中创建一个新文件,并将其命名为linegraph.html。
此文件将显示折线图。
文件:linegraph.html
<!DOCTYPE html>
<html>
<head>
<title>ChartJS - LineGraph</title>
<style>
.chart-container {
width: 640px;
height: auto;
}
</style>
</head>
<body>
<div class="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<!-- javascript -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/linegraph.js"></script>
</body>
</html>
在linegraph.js中编写一些JavaScript
我们将从linegraph.js文件到followersdata.php文件进行AJAX调用,以获取用于绘制折线图的JSON数据。
文件:linegraph.js
$(document).ready(function(){
$.ajax({
url : "http://localhost/chartjs/followersdata.php",
type : "GET",
success : function(data){
console.log(data);
var userid = [];
var facebook_follower = [];
var twitter_follower = [];
var googleplus_follower = [];
for(var i in data) {
userid.push("UserID " + data[i].userid);
facebook_follower.push(data[i].facebook);
twitter_follower.push(data[i].twitter);
googleplus_follower.push(data[i].googleplus);
}
var chartdata = {
labels: userid,
datasets: [
{
label: "facebook",
fill: false,
lineTension: 0.1,
backgroundColor: "rgba(59, 89, 152, 0.75)",
borderColor: "rgba(59, 89, 152, 1)",
pointHoverBackgroundColor: "rgba(59, 89, 152, 1)",
pointHoverBorderColor: "rgba(59, 89, 152, 1)",
data: facebook_follower
},
{
label: "twitter",
fill: false,
lineTension: 0.1,
backgroundColor: "rgba(29, 202, 255, 0.75)",
borderColor: "rgba(29, 202, 255, 1)",
pointHoverBackgroundColor: "rgba(29, 202, 255, 1)",
pointHoverBorderColor: "rgba(29, 202, 255, 1)",
data: twitter_follower
},
{
label: "googleplus",
fill: false,
lineTension: 0.1,
backgroundColor: "rgba(211, 72, 54, 0.75)",
borderColor: "rgba(211, 72, 54, 1)",
pointHoverBackgroundColor: "rgba(211, 72, 54, 1)",
pointHoverBorderColor: "rgba(211, 72, 54, 1)",
data: googleplus_follower
}
]
};
var ctx = $("#mycanvas");
var LineGraph = new Chart(ctx, {
type: 'line',
data: chartdata
});
},
error : function(data) {
}
});
});

