1 任务目的
该篇为实现PHP、HTML、MySQL、JavaScript(Ajax)、Echarts交互,利用PHP从MySQL中取出数据,利用Ajax响应,通过Echarts绘图,并在HTML上显示的功能而写作。
代码主体分为两部分,包括PHP部分及HTML部分,其中每个部分可根据自己的需要进行补充。
注明:“---------”用于分块,以便更加直观的显示代码成分,并非表示注释或有其他含义。
代码运行于WampServer搭建的系统上,需实时连接数据库。
2 主体代码
2.1 PHP部分
<?php
header("charset=UTF-8"); //设置字符编码,避免切换网站时出现乱码。
$con = mysqli_connect("localhost", "$YourUserName", "$YourPassword", "$YourDataBase"); //$YourUserName:用户名; $YourPassword:密码; $YourDataBase:选择的数据库.
mysqli_set_charset($con, "utf8mb4"); //设置数据库编码,避免提取数据时无法读取。
$sql = "SELECT * FROM TableName"; //TableName:选择的数据库中表的名称。
$result = mysqli_query($con, $sql); //读取表中数据。
$data = array(); //设置$data为数组,用于存储从表中读取的数据。
------------------------------------------------------------------------------------------------------------------------
class System{ //假设该表中有三个字段,该类的创建用于放置这三个字段的内容。
public $date; //放置日期;
public $a; //放置字段1;
public $b; //放置字段2;
}
while($row = mysqli_fetch_array($result)){ //循环,依次读取$result中每一行数据。
$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();
?>
2.2 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/YourBackgroundImage.jpg"> <!--背景图片-->
<div id = "container" style = "width:100%;height:900px;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: 35 <!--设置字体大小-->
}
},
xAxis: { <!--设置X轴属性-->
type: 'category',
data: arr1, <!--设置X轴数据-->
axisLabel: { <!--设置X轴属性-->
color: '#000000', <!--设置坐标轴字体颜色-->
fontSize: 35 <!--设置坐标轴字体大小-->
},
splitLine: { <!--设置垂直X轴网格线属性-->
show: true, <!--是否显示网格线选项-->
lineStyle:{ <!--设置网格线线条属性-->
color: ['#EDEDED'], <!--设置网格线颜色属性-->
width: 3, <!--宽度-->
type: 'solid' <!--类型-->
}
},
axisTick: { <!--设置坐标轴刻度-->
inside: true <!--设置刻度位于内或外-->
},
}, <!--语句、每一项属性最好都要加上逗号>
yAxis: {
type: 'value',
axisLabel: {
color: '#000000',
fontSize: 35
},
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>
3 结果及讨论
3.1 步骤及功能
(1)PHP的日期字段读取MySQL数据;
(2)MySQL数据联系Ajax传输至JavaScript中;
(3)Echarts绘图库的引入,绘制字段变量随时间(日期)变化的平滑折线图;
3.2 实现结果截图
注:使图像中出现多条线,可通过增加Series中“{}”数据序列完成,但要保证序列的长度与时间长度一致。