PHP:从Excel到MySQL到网页

本文介绍如何使用PHP和PHPExcel插件将Excel数据导入MySQL数据库,并将数据库内容展示在网页上。涵盖数据库配置、数据读取、插入及网页显示等步骤。

实现内容:

  • 通过php,将Excel的信息读取到MySQL
  • 再将MySQL的信息显示到网页上

实现效果:
Excel:
在这里插入图片描述

MySQL:
在这里插入图片描述

网页显示效果:
在这里插入图片描述

文件说明:

  • PHPExcel:下载的插件
  • 2020.…….xlsx:需要读入的excel文件
  • dbconfig.php:数据库配置文件
  • db.php:mysql操作类文件
  • inset.php:将excel写入mysql
  • display.php:将mysql的信息显示在网页上

——————————

  • reader.php:直接读取excel文件信息,显示在在网页上(与此内容无关)

——————————

在这里插入图片描述
————————————————————————————


————————————————————————————

01 准备工作

  • 学习PHPExcel,下载PHPExcel插件
    可参考:PHPExcel的使用:使用PHP对Excel和MySQL操作
  • 打卡XAMPP,开启Apache和MySQL
  • 浏览器输入http://127.0.0.1:8001/phpmyadmin/ 进入phpmyadmin,管理数据库
    (8001为Apache的端口号)
  • 在数据库内创建gutable数据库
  • gutable数据库内创建account/code>表单
  • account/code>内建立 order_source 等15个字段的表头
  • 将所创建的php文件放到XAMPP安装根目录的 htdocs

02 dbconfig.php:数据库配置文件

我设置的数据库密码为 123456
我创建的数据库名称为 gutable
以上可自行更改,数据库默认密码为空

<?php
	$phpexcel = array(
		"host"=>"127.0.0.1",
		"username"=>"root",
		"password"=>"123456",
		"database"=>"gutable",
		"charset"=>"utf8"
	);
?>

03 db.php:mysql操作类文件

  • account为我创建的表单名

  • dirname( __ FILE __ ):当前目录
  • php中的“.”等同于c++中的“+”
  • dirname(FILE)."/dbconfig.php"效果即为:字符串“当前目录地址”+“/dbconfig.php”
    ,即为 dbconfig.php 文件的绝对目录地址
  • require: 引入文件

  • class db创建类db
  • db类函数首先执行构造函数,将数据库的名字、密码等赋值给conn
  • or die(mysqli_error():如果不成功则错误

  • $sql = "select * from ‘ account` ":双引号 内 是sql语句;单引号 内 是 sql 内的字符串,此处account是表单名

  • $ sql = “insert into ‘account` (order_source,camp,profession,gift,item,order_form,phone_num,order_time,name,remark,team_num,cast_to,fini_date,fig_stat,sys_stat) values (”.$totalData.")";
    将 totalData 内的数据 传递给 数据库中 account表单内 order_source等字段
    totalData是定义在Insert.php内的变量,其作用是读入excel中一行的值
<?php
	require dirname(__FILE__)."/dbconfig.php";//引入配置文件

	class db{
		public $conn = null;
		
		public function __construct($config){//构造方法,实例化类时自动调用
			$this->conn = mysqli_connect($config['host'],$config['username'],$config['password']) or die(mysqli_error());//连接数据库
			mysqli_select_db($this->conn,$config['database']) or die(mysqli_error());//选择数据库
			mysqli_query($this->conn,"set names ".$config['charset']) or die(mysqli_error($this->conn));//设定mysql编码
		}
		
		/**
		根据传入sql语句 查询mysql结果集
		**/
		public function getResult($sql){
			$resource = mysqli_query($this->conn,$sql) or die(mysqli_error($this->conn));//查询sql语句
			$res = array();
			while(($row=mysqli_fetch_assoc($resource))!=false){
				$res[] = $row;
			}
			return $res;
		}
		
		/**
		从account数据表中获取全部数据
		**/
		public function getDataBySQL(){
			$sql = "select * from `account`";//account是设置的MySQL表单名,可自行修改
			$res = self::getResult($sql);
			return $res;
		}
		
		/**
		将数据增加到account数据表中
		**/
		public function insertDataBySQL($totalData){
			$sql = "insert into `account` (order_source,camp,profession,gift,item,order_form,phone_num,order_time,name,remark,team_num,cast_to,fini_date,fig_stat,sys_stat) values (".$totalData.")";
			mysqli_query($this->conn,$sql);
		}
	}
?>

04 inset.php:将excel写入mysql

  • $dir = dirname( __ FILE__);//获得当前脚本所在路径
    便于之后各文件定位

  • require $dir."/PHPExcel/PHPExcel/IOFactory.php";//引入excel读取类文件
    这是PHPExcel插件 中excel读取类文件,读取excel均需要这个文件

  • $ db = new db($phpexcel);//实例化db类,连接数据库

可以这样理解

  • 第一个db是实例化
  • 第二个db是db.php中写入的类Class db,现在这个操作是将其实例化,所以将调用构造函数,传入连接的数据库信息
  • $phpexce是dbconfig.php中定义的数据结构类型,像是c++中的定义的struct,而这个里面就存放着数据库名字、密码等各种信息,
    作为实参传递给 db类 里,帮助完成构造函数

  • $ objPHPExcel = PHPExcel_IOFactory::load($filename);//加载excel文件
    加载 需要读取的Excel文件,此处是全部加载

  • $sheet = $objPHPExcel->getSheet(2);//选择第三个sheet
    这里第1个sheet的标记号为0

  • 接下来进行逐行遍历 foreach ,对于表头位置 跳过 (if($row->getRowIndex()<2)),因为表头就是 订单来源 等这些信息,这个我们已经在mysql数据库中创建了

  • $totalData = “”;//SQL 增添语句的一部分
    创建了变量 totalData 了,接下来这个我们会传入 db.php最后一个函数 insertDataBySQL 的 sql操作语句 中
  • 由于已经在 逐行遍历 的循环里了,21行 再使用的 foreach 就是逐个单元格的遍历了
    • 当 i >15 就可以continue跳出这行的遍历了
    • 否则,将读取的excel单元格内容赋值给data
    • 如果i=15,则说明是 这行里 最后一个单元格 了,所以$ totalData .= “’”.$data."’",即作为string变量,totalData+=data
    • 如果i<15,则说明他后面还有单元格,所以$ totalData .= “’”.$data."’,",即totalData+=data+,
      • 也就是说$ totalData .= “’”.$data."’"的第一个双引号内容为空,然后通过“.”实现php的加操作,加上读取的data值,再通过“.”实现php的加操作,加上第二个双引号–>如果是一行里最后一个单元格,则里面内容为空,否则为 逗号 ,便于和后面的单元格连接

  • 最后,$ db->insertDataBySQL($totalData);//将每行数据增添到数据表中
<?php
header("charset=utf-8");
$dir = dirname(__FILE__);//获得当前脚本所在路径
require $dir."/db.php";//引入mysql操作类文件
require $dir."/PHPExcel/PHPExcel/IOFactory.php";//引入excel读取类文件

$db = new db($phpexcel);//实例化db类,连接数据库
$filename = $dir."/2020.02.20 CD 流水.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($filename);//加载excel文件

$sheet = $objPHPExcel->getSheet(2);//选择第三个sheet

foreach($sheet->getRowIterator() as $row){//逐行遍历
	if($row->getRowIndex()<2){//跳过表头
		continue;
	}
	$i = 0;

	$totalData = "";//SQL 增添语句的一部分
	foreach($row->getCellIterator() as $cell){//逐个单元格遍历
		$i++;
		if($i > 15){
			continue;
		}
		$data = $cell->getValue();//获得单元格的值
		if($i == 15){
			$totalData .= "'".$data."'";
		}else{
			$totalData .= "'".$data."',";
		}
	}
	$db->insertDataBySQL($totalData);//将每行数据增添到数据表中

}

?>

05 display.php:将mysql的信息显示在网页上

  • head的style里定义样式
  • table tr:nth-child(6) td{background: #348051;} 可以实现表格不同行也是不同
  • < table>:创建表格;< th>是表头;< td>是表的内容;< tr>每行的开始和结束
  • echo $html;//echo到HTML中
<!doctype html>
<html>
<head>
	<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/> 
	<title>无标题文档</title>
	<style>
		td{
			background-color: azure;
		}
		th{
			background-color: #fc9d9a;
		}
        table tr:nth-child(6) td{background: #348051;}
        table tr:nth-child(7) td{background: #348051;}
        table tr:nth-child(8) td{background: #e4ed53;}
	</style>
</head>

<body>
	<table text-align="left" cellspacing="0" border="1" bordercolor="#f9cdad">
	<tr>

		<th>订单来源</th>  <!--order_source-->
		<th>阵营</th>   <!--camp-->
		<th>职业</th>   <!--profession-->
		<th>天赋装等</th>   <!--gift-->
		<th>项目</th>   <!--item-->
		<th>订单格式内容</th>   <!--order_form-->
		<th>电话</th>   <!--phone_num-->
		<th>接单时间</th>   <!--order_time-->
		<th>角色名</th>   <!--name-->
		<th>备注</th>   <!--remark-->
		<th>团队编号</th>   <!--team_num-->
		<th>抛单下家</th>   <!--cast_to-->
		<th>完成日期</th>   <!--fini_date-->
		<th>图状态</th>   <!--fig_stat-->
		<th>系统状态</th>   <!--sys_stat-->

	</tr>
	<?php
	$dir = dirname(__FILE__);//获得当前脚本所在路径
	require $dir."/db.php";//引入mysql操作类文件
	$db = new db($phpexcel);//实例化db类,连接数据库
	$data = $db->getDataBySQL();//获取数据表中的数据
	foreach($data as $key_1=>$value_1){//逐行遍历
		$html = "";//echo到HTML中的字符串
		$i = 0;
		foreach($value_1 as $key_2=>$value_2){//逐个单元格遍历
			$i++;
			if($i == 1){
				$html .= "<tr><td>".$value_2."</td>";//每行开始
			}elseif($i == 15){
				$html .= "<td>".$value_2."</td></tr>";//每行结束
			}else{
				$html .= "<td>".$value_2."</td>";//每行中间
			}
		}
		echo $html;//echo到HTML中
	}
	?>
	</table>
</body>
</html>

06 其他:read.php实现直接从excel读入,并显示在网页上

<!doctype html>
<html>
<head>
	<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/>  
</head>
<body>
	<table style='text-align:left;' border='1'>
		<tr><th>order_source</th><th>camp</th><th>profession</th><th>gift</th><th>item</th></tr>
<?php
$dir = dirname(__FILE__);
require $dir."/db.php";
require "D:/ws/xampp/PHPExcel/PHPExcel/PHPExcel/IOFactory.php";
$db = new db($phpexcel);
$filename = $dir."/2020.02.20 CD 流水.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($filename);

$sheet = $objPHPExcel->getSheet(1);
foreach($sheet->getRowIterator() as $row){
	if($row->getRowIndex()<2){
		continue;
	}
	$i = 0;
	$totalData = "";
	foreach($row->getCellIterator() as $cell){
		$i++;
		if($i>5){
			continue;
		}
		$data = $cell->getValue();
		
		if($i == 1){
			echo "<tr><th>".$data."</th>";
		}elseif($i == 5){
			echo "<th>".$data."</th></tr>";
		}else{
			echo "<th>".$data."</th>";
		}
	}
	echo "<br/>";
}
?>
</body>
</html>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值