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) {

    }
  });
});