php和ajax连接数据库实现动态数据可视化

        前一篇文章 "[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

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta charset="utf-8">  
  5.     <title>ECharts</title>  
  6.     <!-- 引入 echarts.js -->  
  7.     <script src="echarts.min.js"></script>  
  8. </head>  
  9. <body>  
  10.     <!-- 为ECharts准备一个具备大小(宽高)的Dom -->  
  11.     <div id="main" style="width: 600px;height:400px;"></div>  
  12.     <script type="text/javascript">  
  13.         // 基于准备好的dom,初始化echarts实例  
  14.         var myChart = echarts.init(document.getElementById('main'));  
  15.   
  16.         // 指定图表的配置项和数据  
  17.         var option = {  
  18.             title: {  
  19.                 text: 'ECharts 入门示例'  
  20.             },  
  21.             tooltip: {},  
  22.             legend: {  
  23.                 data:['数量']  
  24.             },  
  25.             xAxis: {  
  26.                 data: ["贵阳市","遵义市","凯里市","六盘水市","都匀市","毕节市"]  
  27.             },  
  28.             yAxis: {},  
  29.             series: [{  
  30.                 name: '数量',  
  31.                 type: 'bar',  
  32.                 data: [5, 20, 36, 10, 10, 20]  
  33.             }]  
  34.         };  
  35.   
  36.         // 使用刚指定的配置项和数据显示图表。  
  37.         myChart.setOption(option);  
  38.     </script>  
  39. </body>  
  40. </html>  
        运行结果如下图所示:



二. 创建数据库

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


        SQL语句对应的代码:

[sql]  view plain  copy
  1. -- ----------------------------  
  2. -- Table structure for `guizhou`  
  3. -- ----------------------------  
  4. DROP TABLE IF EXISTS `guizhou`;  
  5. CREATE TABLE `guizhou` (  
  6.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  7.   `place` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,  
  8.   `num` int(11) DEFAULT NULL,  
  9.   PRIMARY KEY (`id`)  
  10. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;  
  11.   
  12. -- ----------------------------  
  13. -- Records of guizhou  
  14. -- ----------------------------  
  15. INSERT INTO `guizhou` VALUES ('1''贵阳市''5');  
  16. INSERT INTO `guizhou` VALUES ('2''遵义市''20');  
  17. INSERT INTO `guizhou` VALUES ('3''凯里市''36');  
  18. INSERT INTO `guizhou` VALUES ('4''六盘水市''10');  
  19. INSERT INTO `guizhou` VALUES ('5''都匀市''10');  
  20. INSERT INTO `guizhou` VALUES ('6''毕节市''20');  


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

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

[php]  view plain  copy
  1. <?php  
  2.     //PHP连接数据库   
  3.     header("content-type:text/json;charset=utf-8");  
  4.     //链接数据库  
  5.     $con = mysql_connect("localhost""root""123456");   
  6.     if (!$con)   
  7.     {   
  8.         die('Could not connect database: ' . mysql_error());   
  9.     }   
  10.   
  11.     //选择数据库  
  12.     $db_selected = mysql_select_db("hcpmanage"$con);   
  13.     if (!$db_selected)   
  14.     {   
  15.         die ("Can\'t use yxz : " . mysql_error());   
  16.     }   
  17.   
  18.     //执行MySQL查询-设置UTF8格式  
  19.     mysql_query("SET NAMES utf8");    
  20.   
  21.     //查询学生信息  
  22.     $sql = "SELECT * FROM `guizhou` ";  
  23.     $result = mysql_query($sql,$con);   
  24.   
  25.     //定义变量json存储值  
  26.     $data="";  
  27.     $arrayarray();  
  28.     class GuiZhou{  
  29.         public $id;  
  30.         public $place;  
  31.         public $num;  
  32.     }  
  33.   
  34.     while ($row = mysql_fetch_row($result))  
  35.     {   
  36.         list($id,$place,$num) = $row;     
  37.       
  38.         /* 
  39.         echo $id.' '; 
  40.         echo $place.' '; 
  41.         echo $num; 
  42.         echo '<br >'; 
  43.         */  
  44.         $gz = new GuiZhou();  
  45.         $gz->id = $id;  
  46.         $gz->place = $place;  
  47.         $gz->num = $num;  
  48.   
  49.         //数组赋值  
  50.         $array[] = $gz;  
  51.     }  
  52.   
  53.     $data = json_encode($array);  
  54.     echo $data;  
  55.     //{"id":"1","place":"\u8d35\u9633\u5e02","num":"5"}  
  56.   
  57. ?>  
        核心代码,通过array数组获取Guizhou类中的值,该值是读取数据库并且赋值给实例gz的,再调用json_encode($array)进行格式转换。输出结果如下所示,也可以Json只获取两个值。


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




四. Ajax动态实现Echarts可视化

        test02.html代码如下:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta charset="utf-8">  
  5.     <title>ECharts</title>  
  6.     <!-- 引入 echarts.js -->  
  7.     <script src="echarts.min.js"></script>  
  8.     <script src="jquery-1.9.1.min.js"></script>  
  9. </head>  
  10. <body>  
  11.     <!-- 为ECharts准备一个具备大小(宽高)的Dom -->  
  12.     <div id="main" style="width: 600px;height:400px;"></div>  
  13.     <script type="text/javascript">  
  14.         // 基于准备好的dom,初始化echarts实例  
  15.         var myChart = echarts.init(document.getElementById('main'));  
  16.         // 初始化两个数组,盛装从数据库中获取到的数据  
  17.         var places=[], nums=[];  
  18.         function TestAjax(){  
  19.             $.ajax({  
  20.                 type: "post",  
  21.                 async: false,     //异步执行  
  22.                 url: "sql.php",   //SQL数据库文件  
  23.                 data: {},         //发送给数据库的数据  
  24.                 dataType: "json", //json类型  
  25.                 success: function(result) {  
  26.                     if (result) {  
  27.                         for (var i = 0; i < result.length; i++) {  
  28.                             places.push(result[i].place);  
  29.                             nums.push(result[i].num);  
  30.                             console.log(result[i].place);  
  31.                             console.log(result[i].num);  
  32.                         }  
  33.                     }  
  34.                 }  
  35.             })  
  36.             return places, nums;  
  37.         }  
  38.   
  39.         //执行异步请求  
  40.         TestAjax();  
  41.   
  42.         // 指定图表的配置项和数据  
  43.         var option = {  
  44.             title: {  
  45.                 text: 'ECharts+Ajax+MySQL+PHP'  
  46.             },  
  47.             tooltip: {  
  48.                 show : true  
  49.             },  
  50.             legend: {  
  51.                 data:['数量']  
  52.             },  
  53.             xAxis: [{  
  54.                 //data: ["贵阳市","遵义市","凯里市","六盘水市","都匀市","毕节市"]  
  55.                 type : 'category',  
  56.                 data : places  
  57.             }],  
  58.             yAxis: {  
  59.                 type : 'value'  
  60.             },  
  61.             series: [{  
  62.                 name : "数量",  
  63.                 type : "bar",  
  64.                 data : nums  
  65.             }]  
  66.         };  
  67.   
  68.         // 使用刚指定的配置项和数据显示图表。  
  69.         myChart.setOption(option);  
  70.     </script>  
  71.     <marquee>Eastmount 璋 love 娜!!!</marquee>  
  72. </body>  
  73. </html>  
        运行结果如下图所示,这是动态调用的可视化结果。


        其中Ajax核心代码为:

[html]  view plain  copy
  1. var places=[], nums=[];  
  2.    function TestAjax(){  
  3.        $.ajax({  
  4.            type: "post",  
  5.            async: false,     //异步执行  
  6.            url: "sql.php",   //SQL数据库文件  
  7.            data: {},         //发送给数据库的数据  
  8.            dataType: "json", //json类型  
  9.            success: function(result) {  
  10.                if (result) {  
  11.                    for (var i = 0; i < result.length; i++) {  
  12.                        places.push(result[i].place);  
  13.                        nums.push(result[i].num);  
  14.                        console.log(result[i].place);  
  15.                        console.log(result[i].num);  
  16.                    }  
  17.                }  
  18.            }  
  19.        })  
  20.        return places, nums;  
  21.    }  
  22.    //执行异步请求  
  23.    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
            }]


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值