PHP+MYSQL 可视化Echarts 完整源码,小白总结

背景:

十年前,自学过ASP,一知半解,现在在一家公司从事行政+IT管理(网络,桌面运维),发现公司一百号多号人的公司,依然使用传统的EXCEL 表格处理数据,经常找到我说服务器不行,服务上的EXCEL 总是提示只读,实际上没有人打开,同时这样的EXCEL 数据共享,安全存在严重安全隐患,实在看不下去了。

国庆这几天,尝试自学PHP为他们解决以上问题,也是为了自己,既然沉迷上了 ,经过几天的学习,走过很多弯路,吃了很多苦头,有时候一个问题解决不了几天睡不着的程度,我发现网上很多代码因为版本问题不能使用,特别是在数据库连接方面,原因是没有注明PHP,和MYSQL 版本,WEB 服务搭建等。影响我们这些小白学习的激情,现在把PHP学习总结如下,希望能帮到大家:

实验目的:

该篇为实现PHP、HTML、MySQL、JavaScript(Ajax)、Echarts交互,利用PHP从MySQL中取出数据,利用Ajax响应,通过Echarts绘图,并在HTML上显示的功能而写作。

代码主体分为三部分,包括MYSQL 数据库连接,PHP部分及HTML部分,其中每个部分可根据自己的需要进行补充。

本次实验效果如下:

一、基本信息

操作系统 :windows10+谷歌浏览器

PHP 版本:7.9.1,MYSQL:5.7.26,WEB 服务器:小皮PHPSTUDY_PRO 8.1

表名:chart

数据预览

二、数据库连接

       2.1 创建数据库连接代码数组, function_case.php,代码如下 :

<?php
	function connetct($conf=[])//将$conf[] 数组的值传递给自定义函数CONNETCT(),组成完整的数据库连接代码;
	{      
		$link_code=mysqli_connect($conf['host'],$conf['user'],$conf['pass']);  //$link 数据库连接相关取值在config.php 文件中的数据组中取出。
		$link_code or die("连接数据库失败,请检查服务器名称、用户名、密码是否有误");// 连接失败返回中止终止程序,并输出自定义“连接数据库失败”。
		mysqli_set_charset($link_code,"utf8");//设置字体集为UTF-8 防止乱码。
		//选择数据库名称
		if(mysqli_select_db($link_code,$conf["db"]))
			{			
				return $link_code;			
			}
		else{		

				die("数据库名称连接失败");		
				
			}						


	}


?>

      2.2 配置数据库基本信息,config_case.php,代码如下:

<?php
    //返回一个数组。
	return[
		"host"=>"localhost",//服务器名称
		"user"=>"root",  //用户名
		"pass"=>"root",//密码
		"db"=>"db_tct",//数据库
		"prot"=>3306  //端口号,MYSQL默认3306
	
	
	];



?>

三、创建Echarts 应用代码

 1、读取数据库后的内容经过处理,成为json 能识别的代码,给JS 调用,创建文件:System.php,代码如下:

<?php

$arr=require"../php/config_case.php";
//调用funcion.php 中的数据库连接自定义connect()函数。
include"../php/function_case.php";
//将$arr数组数据传递给数据库连接函数connect(),以实现数据连接代码$link;
$link=connetct($arr);

if (!$link) 
	{
		exit('error('.mysqli_connect_errno.'):'.mysqli_connect_error);//不继续向下执行
	    //die 
	}

        mysqli_set_charset($link, "utf8mb4");        //设置数据库编码,避免提取数据时无法读取。
        //mysqli_query($conn,"set names 'utf8'"); //数据库输出编码

        $sql = "SELECT * FROM chart";        //TableName:选择的数据库中表的名称。
        $result = mysqli_query($link,$sql);        //读取表中数据。
         //var_dump($result);
        $data = array();        //设置$data为数组,用于存储从表中读取的数据。


        class System{        //假设该表中有三个字段,该类的创建用于放置这三个字段的内容。

                public $date;         //放置日期;

                public $a;        //放置字段1;

                public $b;        //放置字段2;
				


                }

        while($row = mysqli_fetch_array($result)){          //循环,依次读取$result中每一行数据。
             //var_dump($row);     
                $alter = new System();        //创建System中的对象,具有放置三个字段的能力。

                $alter -> date = $row['Date'];        //读取日期值;

                $alter -> a = $row['ar1'];        //读取字段1值;

                $alter -> b = $row['ar2'];        //读取字段2值;

                $data[] = $alter;        //用数组$data存储结果;

        }


        $BD = json_encode($data);        //响应HTML中的ajax部分;
        echo $BD;
        exit();
?>

到这里,直接浏览器预览system.php ,显示格式正确如下:

[{"date":"2021-10-21","a":"100","b":"1000"},{"date":"2021-10-22","a":"300","b":"2000"},{"date":"2021-10-23","a":"50","b":"3000"},{"date":"2021-10-24","a":"400","b":"4000"},{"date":"2021-10-25","a":"500","b":"5000"},{"date":"2021-10-26","a":"600","b":"6000"},{"date":"2021-10-27","a":"700","b":"7000"}]

echo $BD; 就是输出以上的结果 ,也可以在同样的位置添加一句:var_dump($BD)调试,得出以上输出结果。

2、创建HTML文件,用于前端呈现,index.html,代码如下:

<!DOCTYPE html>
<html>

<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />       <!--设置字符编码,避免乱码或切换网页时出现源代码-->

        <script src="https://cdn.staticfile.org/echarts/4.7.0/echarts.min.js"></script>       <!--引入Echarts库,可通过网址在线引入-->  

        <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>       <!--引入jquery,用于设置ajax联系PHP部分的数组-->

</head>

<!-------------------------------------------------------------------------------------------------->

<link rel = "stylesheet" type = "text/css" href = "YourCSSFileName.css"/>        <!--CSS文件用于修饰HTML页面-->

<!-------------------------------------------------------------------------------------------------->

<body background="../images/bg.jpg">        <!--背景图片-->        

        <div id = "container" style = "width:1000px;height:400px;background:#fff"></div>       <!--设置Echarts画图容器,赋予宽、高、背景颜色等属性-->

<!-------------------------------------------------------------------------------------------------->

        <script type = "text/javascript">       <!--JavaScript标签,用于Ajax联系与Echarts图表属性设置-->

        var mychart = echarts.init(document.getElementById("container"));       <!--引入Echarts变量-->

        var arr1 = [], arr2 = [], arr3 = [];       <!--引入三种数组分别用于存储Ajax联系的PHP部分中的$data部分的数据-->

        function getusers(){       <!--设置Ajax联系函数-->

                $.ajax({       <!--设置Ajax联系-->

                type:"post",       <!--设置“post”方法-->

                async:false,       <!--设置同步或异步传输-->

                url:"System.php",       <!--设置PHP路径-->

                data:{},       <!--设置数据-->

                dataType:'json',       <!--设置数据类型为json-->

                success:function(result){       <!--设置传输成功函数-->

                        console.log(result);       <!--调试json的内容,并将其传输至页面上

                        if(result){       <!--读取由PHP部分的json_encode通过Ajax响应的数据-->

                                for(var i = 0;i < result.length;i++){       <!--循环读取各字段存储数据-->

                                        arr1.push(result[i].date);       <!--获取date对应的数据并存储至arr1中-->

                                        arr2.push(result[i].a);       <!--获取a对应的数据并存储至arr2中-->

                                        arr3.push(result[i].b);       <!--获取b对应的数据并存储至arr3中-->

                               }

                       }

                },       <!--语句结束后别忘了加逗号-->

               error:function(errmsg){       <!--显示Ajax连接错误的情况-->

                       alert("Ajax获取服务器数据出错了!" + errmsg);        <!--输出结果以显示错误情况-->

               }

       });

       return arr1,arr2,arr3;        <!--返回三个数组存储的数据-->

       }

       getusers();        <!--调用函数,应用Ajax响应-->

<!---------------------------------------------------------------------------------->

       <!--设置Echarts图表属性,下图为平滑折线图,具体实例见网址:https://echarts.apache.org/examples/zh/index.html,点开实例有相应代码-->

       var option = {        <!--设置图表属性-->

               tooltip : {        <!--显示鼠标滑过图表时的显示框-->

                       trigger: 'axis',

                       axisPointer: {

                       type: 'cross',        <!--设置交叉显示框-->

                       label: {

                               backgroundColor: '#6a7985'        <!--设置背景颜色-->

                       }

                       }

               },

               title:{        <!--设置图表标题-->

                       text:"案件状态表",        <!--图表标题-->

                       x: 'center',        <!--设置图表标题位置-->

                       y: '7px',        <!--设置图表标题垂直偏移量-->

                       textStyle: {        <!--设置字体属性-->

                               color: '#000000',       <!--设置字体颜色-->

                               fontSize: 20        <!--设置字体大小-->

                       }

               },

               xAxis: {        <!--设置X轴属性-->


                       type: 'category',

                       data: arr1,        <!--设置X轴数据-->

                       axisLabel: {        <!--设置X轴属性-->

                               color: '#000000',        <!--设置坐标轴字体颜色-->

                               fontSize: 20        <!--设置坐标轴字体大小-->

                       },

                       splitLine: {        <!--设置垂直X轴网格线属性-->

                               show: true,        <!--是否显示网格线选项-->

                               lineStyle:{        <!--设置网格线线条属性-->

                                       color: ['#EDEDED'],        <!--设置网格线颜色属性-->

                                       width: 3,        <!--宽度-->

                                       type: 'solid'        <!--类型-->

                               }

                 },

                       axisTick: {        <!--设置坐标轴刻度-->

                               inside: true        <!--设置刻度位于内或外-->

                       },

               },        <!--语句、每一项属性最好都要加上逗号>

               yAxis: {

                       type: 'value',

                       axisLabel: {

                               color: '#000000',

                               fontSize: 20

                       },

                       splitLine: {

                               show: true,

                               lineStyle:{

                                       color: ['#EDEDED'],

                                       width: 3,

                                       type: 'solid'

                               }

                 },

                      axisTick: {

                               inside: true

                       },

             },

             series: [        <!--设置数据系列-->

             {

                     data: arr2,

                     type: 'line',

                     smooth: true,        <!--设置是否平滑属性-->

               }

               ]

           };

<!---------------------------------------------------------------------------------->

       mychart.setOption(option);        <!--设置并运行option-->

<!---------------------------------------------------------------------------------->

</script>

</body>

</html>

echarts 的两个文件echarts.min.js、jquery.min.js,自行下载,方便离线使用

下载地址:

https://cdn.staticfile.org/echarts/4.7.0/echarts.min.js

http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js

三、建议学习 var_dump($变量名)  的使用,如var_dump($link), var_dump($sql)等,我主要用于数据库连接后 select  查询代码输出的结果调试,调试前,记录先把跳转代码给注释,逐步调试,再看呈现的数据是不是自己要的结果,因为新手,理解 mysqli_fetch_array ,mysqli_fetch_row,mysqli_fetch_ASSOC 有点困难。

猜你喜欢

转载自blog.csdn.net/weixin_30219751/article/details/127186199