[Echarts可视化] 二.php和ajax连接数据库实现动态数据可视化

2023-11-11

前一篇文章 "[Echarts可视化] 一.入门篇之简单绘制中国地图和贵州地区" 主要是通过Echarts可视化介绍入门知识、中国地图和贵州地区各省份的数据分析,其中贵州地图才是它的核心内容。
这篇文章主要结合PHP、MySQL、JQuery和Ajax从数据库中获取数据,动态的显示值,这是实现真正可视化的技术入,可以应用于实际的项目中。基础性文章,希望对您有所帮助,如果文章中存在不足之处,还请海涵~


参考文章:ECharts, PHP, MySQL, Ajax, JQuery 实现前后端数据可视化
          echarts+php+mysql 绘图实例 - 谦一
          PHP+echarts读取地图数据

该篇文章代码下载地址:




一. 回顾Echarts绘制直方图

Echarts官网地址:http://echarts.baidu.com/index.html
注意:基础知识参考前一篇文章,这篇文章主要是代码为主,整个流程都是详细的。同时发现,准备写这篇文章的时候,“纯臻”大神也写了篇类似的,但依然有不同的地方可能对你有所帮助。
Echarts代码 test01.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js -->
    <script src="echarts.min.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定图表的配置项和数据
        var option = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {},
            legend: {
                data:['数量']
            },
            xAxis: {
                data: ["贵阳市","遵义市","凯里市","六盘水市","都匀市","毕节市"]
            },
            yAxis: {},
            series: [{
                name: '数量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>
运行结果如下图所示:



二. 创建数据库

创建数据库hcpmanage,再创建表guizhou,包括序号、地名、数量三个字段。
如下所示:


SQL语句对应的代码:

-- ----------------------------
-- Table structure for `guizhou`
-- ----------------------------
DROP TABLE IF EXISTS `guizhou`;
CREATE TABLE `guizhou` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `place` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `num` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of guizhou
-- ----------------------------
INSERT INTO `guizhou` VALUES ('1', '贵阳市', '5');
INSERT INTO `guizhou` VALUES ('2', '遵义市', '20');
INSERT INTO `guizhou` VALUES ('3', '凯里市', '36');
INSERT INTO `guizhou` VALUES ('4', '六盘水市', '10');
INSERT INTO `guizhou` VALUES ('5', '都匀市', '10');
INSERT INTO `guizhou` VALUES ('6', '毕节市', '20');


三. PHP连接数据库及Json传值

PHP连接数据库的核心代码大家非常熟悉了,下面这段代码简单包括了Json取值。
sql.php文件:

<?php
	//PHP连接数据库 
	header("content-type:text/json;charset=utf-8");
	//链接数据库
	$con = mysql_connect("localhost", "root", "123456"); 
	if (!$con) 
	{ 
		die('Could not connect database: ' . mysql_error()); 
	} 

	//选择数据库
	$db_selected = mysql_select_db("hcpmanage", $con); 
	if (!$db_selected) 
	{ 
	 	die ("Can\'t use yxz : " . mysql_error()); 
	} 

	//执行MySQL查询-设置UTF8格式
	mysql_query("SET NAMES utf8"); 	

	//查询学生信息
	$sql = "SELECT * FROM `guizhou` ";
	$result = mysql_query($sql,$con); 

	//定义变量json存储值
	$data="";
	$array= array();
	class GuiZhou{
		public $id;
	    public $place;
	    public $num;
	}

	while ($row = mysql_fetch_row($result))
	{ 
		list($id,$place,$num) = $row;   
  	
  		/*
		echo $id.' ';
		echo $place.' ';
		echo $num;
		echo '<br >';
		*/
		$gz = new GuiZhou();
		$gz->id = $id;
		$gz->place = $place;
		$gz->num = $num;

		//数组赋值
		$array[] = $gz;
	}

	$data = json_encode($array);
	echo $data;
	//{"id":"1","place":"\u8d35\u9633\u5e02","num":"5"}

?>
核心代码,通过array数组获取Guizhou类中的值,该值是读取数据库并且赋值给实例gz的,再调用json_encode($array)进行格式转换。输出结果如下所示,也可以Json只获取两个值。


注意访问地址为:http://localhost:8080/20170224YXZ/sql.php,文件放到Apache的htdocs目录下。所有文件如下图所示:




四. Ajax动态实现Echarts可视化

test02.html代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js -->
    <script src="echarts.min.js"></script>
    <script src="jquery-1.9.1.min.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        // 初始化两个数组,盛装从数据库中获取到的数据
        var places=[], nums=[];
        function TestAjax(){
            $.ajax({
                type: "post",
                async: false,     //异步执行
                url: "sql.php",   //SQL数据库文件
                data: {},         //发送给数据库的数据
                dataType: "json", //json类型
                success: function(result) {
                    if (result) {
                        for (var i = 0; i < result.length; i++) {
                            places.push(result[i].place);
                            nums.push(result[i].num);
                            console.log(result[i].place);
                            console.log(result[i].num);
                        }
                    }
                }
            })
            return places, nums;
        }

        //执行异步请求
        TestAjax();

        // 指定图表的配置项和数据
        var option = {
            title: {
                text: 'ECharts+Ajax+MySQL+PHP'
            },
            tooltip: {
                show : true
            },
            legend: {
                data:['数量']
            },
            xAxis: [{
                //data: ["贵阳市","遵义市","凯里市","六盘水市","都匀市","毕节市"]
                type : 'category',
                data : places
            }],
            yAxis: {
                type : 'value'
            },
            series: [{
                name : "数量",
                type : "bar",
                data : nums
            }]
        };

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
    <marquee>Eastmount 璋 love 娜!!!</marquee>
</body>
</html>
运行结果如下图所示,这是动态调用的可视化结果。


其中Ajax核心代码为:

     var places=[], nums=[];
        function TestAjax(){
            $.ajax({
                type: "post",
                async: false,     //异步执行
                url: "sql.php",   //SQL数据库文件
                data: {},         //发送给数据库的数据
                dataType: "json", //json类型
                success: function(result) {
                    if (result) {
                        for (var i = 0; i < result.length; i++) {
                            places.push(result[i].place);
                            nums.push(result[i].num);
                            console.log(result[i].place);
                            console.log(result[i].num);
                        }
                    }
                }
            })
            return places, nums;
        }
        //执行异步请求
        TestAjax(); 
同时,浏览器中检查元素可以对Ajax的值进行测试输出,调用console.log函数。
如下图所示:


数据动态变化,数据库变了,可视化图也变化:





五. 难点及注意事项

初学的同学可能会遇到一下几个问题:

1.其中Echarts和JQuery需要导入的,即:
    <script src="echarts.min.js"></script>
    <script src="jquery-1.9.1.min.js"></script>

2.Echarts使用的方法请大家学习前一篇文章和官网文章,这里不再叙述。

3.PHP文件需要header("content-type:text/json;charset=utf-8");声明Json格式,同时Ajax也需要设置dataType: "json"。

4.声明的Ajax函数需要执行,对应代码中的TestAjax(),否则只是定义未执行。

5.如果Ajax报错 [object Object],如下图所示:



这需要Json格式一致,而我的错误是因为在PHP文件中增加了个注释导致无值,百度都无法解决,头都弄大了,所以写代码需要仔细。

6.最后动态数据是通过变量实现的,即ages替换以前的 [5, 20, 36, 10, 10, 20]。
            series : [ {
                   name : "num",
                   type : "bar",
                   data : ages
            }]



最后希望这篇文章对你有所帮助,尤其是对Echarts可视化感兴趣的同学,同样Java、C#、Python相关网站的原理一样,代码也会上传 。最近心情真的好低落,哎!有时间写日记总结下吧。
        稳坐珠江夜游船,翻转长隆水世界。
        笑谈粤广风流人,宁负天下不负卿

哎!总是心事重重,自己真的有太多的不足和需要成长的地方,以前总会知足,现在也会。哎!为人处世真需要一辈子去学习,且写且珍惜吧,传递正能量。

(By:Eastmount 2017-06-02 中午2点   http://blog.csdn.net/eastmount/  )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Echarts可视化] 二.php和ajax连接数据库实现动态数据可视化 的相关文章

  • 华退学博士王垠:离开是为了获得力量后再回来

    清华退学博士王垠 离开是为了获得力量后再回来 附万言退学书 只提供一种模具生产 标准化的人 而忽视 教育的多样性 的中国教育界是可悲的 异端王垠用现身说法打破了教育界 沉默的螺旋 文 张洋 王垠出名了 这是迟早的事 但这一次 他的出名更多是

随机推荐

  • MySQL LOAD DATA INFILE - 加载没有主键的文件实战

    首先告诉大家关于 MySQL LOAD DATA INFILE 加载没有主键的文件 是可以操作的 接下来就来实战一把 表imagecode结构可以看到有3列 其中id是自增列 drop table imagecode create tabl
  • ztree异步加载

    1 配置好参数 var setting ztreeSetting view showIcon false 前面文件夹显示状态 data key name MC 数据结构的属性由name改成MC async enable true url u
  • 【NVM】node多个版本管理工具安装步骤以及使用

    1 什么是nvm nvm是一个管理nodejs版本的工具 在实际的开发中 有些项目的开发依赖需要不同版本的nodejs运行环境 此时我们就需要使用nvm来管理nodejs版本 2 安装步骤 2 1 下载nvm https github co
  • linux文件赋予用户权限,Linux 给用户赋予操作权限

    chown Rkeesail keesail local赋予local目录给keesailchmod760 local赋予local目录读写权这个目chmod777文件夹名称 可以把文件夹设置成所有用户都有完全的权限 不过更改系统文件夹下的
  • WSL2的安装详细过程(转载)

    这部分记录了如何安装wsl 以及如何升级到wsl2的心酸历程 文章目录 版本要求 升级windows WSL的安装 升级到WSL2 安装linux分发版 排查安装问题 相关链接 记录所踩的坑 版本要求 安装wsl2对系统版本有硬性的要求 运
  • mysql的行转列和列转行

    一 行转列 即将原本同一列下多行的不同内容作为多个字段 输出对应内容 建表语句 DROP TABLE IF EXISTS tb score CREATE TABLE tb score id INT 11 NOT NULL auto incr
  • 语义分割常用数据集整理

    语义分割的数据集分为三类 2D图片 2 5D图片 RGB D 3D图片 每一个类别的数据集都提供了像素级的标签 可以用来评估模型性能 同时其中一部分工作用到了数据增强来增加标签样本的数量 一 2D数据 1 PASCAL Visual Obj
  • 更换 CentOS 7 的下载源为阿里云

    1 备份 mv etc yum repos d CentOS Base repo etc yum repos d CentOS Base repo backup 2 下载新的CentOS Base repo 到 etc yum repos
  • vue3 hooks的简单使用 组合式函数

    想当于vue2的mixins 我们可以使用hooks代替mixins 官方文档 组合式函数 hooks 特点 vue3 中的 hooks 函数相当于 vue2 里面的 mixin 混入 不同在于 hooks 是函数 vue3 中的 hook
  • 离线脱机局域网环境安装visual studio2019企业版

    我这个文章借鉴了网友的一些方法 自己改编的用于记录以后方便自己用 亲测2022社区版可能因为我电脑的win10系统不完善的原因 无法 安装 最后试了2019企业版成功安装 1 在官网下载安装包 点击跳转 2 点开的网页 我英语不好 我翻译了
  • 终极篇 C++算法到安卓的移植——AS调用VS的so库

    目的 windows平台下的c 算法 需要移植到安卓系统上 平时用惯了Visual Studio 再在其他软件上重新写算法 调试算法 实在头疼 所以我用VS的c 移动开发功能创建动态共享库 将算法内容放入 并实现JNI和JAVA接口部分 最
  • libvirt介绍和使用

    libvirt介绍和使用 导读 why what libvirt具体介绍 API 剖析 driver 剖析 如何使用libvirt why what 实现一朵可运行 可运维的云 需要完整的实现三层 VIM层 VNFM层 NFVO层 其中实现
  • C语言文件操作详解(解析各文件函数,如何应用文件函数)

    前言 我们为什么要在C语言中引进文件的概念呢 试想一个场景 我们写好了通讯录的源代码运行后录入了联系人的信息 但是每次的操作范围只局限在此次的执行程序中 执行程序一关 联系人的信息随着执行程序在内存中的消失而消失 因此 我们需要把联系人信息
  • 算法训练营day48

    文章目录 198 打家劫舍 思路分析 代码实现 思考总结 213 打家劫舍II 思路分析 代码实现 337 打家劫舍 III 树形DP 思路分析 代码实现 思考总结 198 打家劫舍 题目链接 你是一个专业的小偷 计划偷窃沿街的房屋 每间房
  • Java String 类练习

    文章目录 前言 一 一些常用的String方法 二 StringBuffer和StringBuilder 1 StringBuffer 2 StringBuilder 一个小项目 学生信息查询系统 简易版 前言 字符串广泛应用 在 Java
  • Docker跨CPU架构使用

    CPU架构 amd64 x86 arm64 mips64el等等 amd64 CPU架构的电脑默认是不能使用其他架构的镜像 但可以通过qemu的技术来实现 Docker跨CPU使用 举例说明 x86 64 CPU架构的电脑运行 ARM64
  • 性能测试:工具篇:Jmeter实时可视化平台搭建

    部署 influxDB 首先 pull influxBD镜像 拉取是1 8的版本 虽有2 0 的版本 但我还是喜欢站在巨人的肩头前行 debugfeng debugfeng sudo docker pull influxdb 1 8 1 8
  • sql for 循环

    declare i int set i 1 while i lt 100 begin update top 1 t set name i where name 123 set i i 1 end
  • SQL Server 数据库实验课第七周——授权:授予与收回

    目录 4 2 3 自主存取控制方法 4 2 4 授权 授予与收回 1 GRANT 2 REVOKE 4 2 5 数据库角色 4 2 3 自主存取控制方法 通过 SQL 的GRANT 语句和REVOKE 语句实现 定义用户存取权限 定义用户可
  • [Echarts可视化] 二.php和ajax连接数据库实现动态数据可视化

    前一篇文章 Echarts可视化 一 入门篇之简单绘制中国地图和贵州地区 主要是通过Echarts可视化介绍入门知识 中国地图和贵州地区各省份的数据分析 其中贵州地图才是它的核心内容 这篇文章主要结合PHP MySQL JQuery和Aja