php 导出excel数据实例代码
很多网站都有导出数据为excel的功能,最开始想用js导出但是网上的文章几乎都一样而且浏览器兼容性还有问题,总之不太好用,那只好用php导出了服务器端处理不存在浏览器兼容的问题。
上图是项目中要要导出的数据,前两行是thead,后面是tbody(里面的tr数量不定)。首先是获取数据发送到php端处理。
代码如下 | 复制代码 |
require_once '../Classes/PHPExcel.php'; $objPHPExcel->setActiveSheetIndex(0); // 列宽 // 行高 $objPHPExcel->getActiveSheet()->setCellValue('A2', '姓名'); $objPHPExcel->getActiveSheet()->setCellValue('B2', '[姓名]'); // 为excel加图片 $objPHPExcel->getActiveSheet()->setCellValue('A17', '其它要求'); $objPHPExcel->getActiveSheet()->getStyle('A17')->getFont()->setBold(true); // 加粗 $objPHPExcel->setActiveSheetIndex(0); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('PHPExcel.xls'); |
有面向对象技术基础的编程人员看一天就可以写起来了。而PHP在访问数据库的时候又经常会出现各种问题,如字符编码问题、SQL语法错误问题、PHP处理数据记录对象和返回对象的问题等。我这里写了一个数据库操作类,封装了数据库增删添改等操作,很方便使用。用这个类,可以加速网站的后台开发。
优点:
1.方便快捷, 数据库操作只需调用接口;
2.统一编码(utf8),不易导致乱码
3.结构清晰. 如处理前端请求的后台程序(test.php) + 表封装类(user.class.php) + 数据库封装类(db.class.php) + 配置信息(configuration.php)
以下例子有四个文件: configuration.php + db.class.php + user.class.php + test.php,放在同一个目录下。
首先是一个数据库配置的文件类configuration.php
代码如下 | 复制代码 |
?> |
接下来就是数据库操作类db.class.php
代码如下 | 复制代码 |
<?php require_once("./configuration.php"); //引入配置常量文件 date_default_timezone_set(TIMEZONE); /** * 类名:DB * 说明:数据库操作类 */ class DB { public $host; //服务器 public $username; //数据库用户名 public $password; //数据密码 public $dbname; //数据库名 public $conn; //数据库连接变量 /** * DB类构造函数 */ public function DB($host=DB_HOST ,$username=DB_USER,$password=DB_PASSWORD,$dbname=DB_NAME) { $this->host = $host; $this->username = $username; $this->password = $password; $this->dbname = $dbname; } /** * 打开数据库连接 */ public function open() { $this->conn = mysql_connect($this->host,$this->username,$this->password); mysql_select_db($this->dbname); mysql_query("SET CHARACTER SET utf8"); } /** * 关闭数据连接 */ public function close() { mysql_close($this->conn); } /** * 通过sql语句获取数据 * @return: array() */ public function getObjListBySql($sql) { $this->open(); $rs = mysql_query($sql,$this->conn); $objList = array(); while($obj = mysql_fetch_object($rs)) { if($obj) { $objList[] = $obj; } } $this->close(); return $objList; } /** * 向数据库表中插入数据 * @param:$table,表名 * @param:$columns,包含表中所有字段名的数组。默认空数组,则是全部有序字段名 * @param:$values,包含对应所有字段的属性值的数组 */ public function insertData($table,$columns=array(),$values=array()) { $sql = 'insert into '.$table .'( '; for($i = 0; $i < sizeof($columns);$i ++) { $sql .= $columns[$i]; if($i < sizeof($columns) - 1) { $sql .= ','; } } $sql .= ') values ( '; for($i = 0; $i < sizeof($values);$i ++) { $sql .= "'".$values[$i]."'"; if($i < sizeof($values) - 1) { $sql .= ','; } } $sql .= ' )'; $this->open(); mysql_query($sql,$this->conn); $id = mysql_insert_id($this->conn); $this->close(); return $id; } /** * 通过表中的某一属性获取数据 */ public function getDataByAtr($tableName,$atrName,$atrValue){ @$data = $this->getObjListBySql("SELECT * FROM ".$tableName." WHERE $atrName = '$atrValue'"); if(count($data)!=0)return $data; return NULL; } /** * 通过表中的"id",删除记录 */ public function delete($tableName,$atrName,$atrValue){ $this->open(); $deleteResult = false; if(mysql_query("DELETE FROM ".$tableName." WHERE $atrName = '$atrValue'")) $deleteResult = true; $this->close(); if($deleteResult) return true; else return false; } /** * 更新表中的属性值 */ public function updateParamById($tableName,$atrName,$atrValue,$key,$value){ $db = new DB(); $db->open(); if(mysql_query("UPDATE ".$tableName." SET $key = '$value' WHERE $atrName = '$atrValue' ")){ //$key不要单引号 $db->close(); return true; } else{ $db->close(); return false; } } /* * @description: 取得一个table的所有属性名 * @param: $tbName 表名 * @return:字符串数组 */ public function fieldName($tbName){ $resultName=array(); $i=0; $this->open(); $result = mysql_query("SELECT * FROM $tbName"); while ($property = mysql_fetch_field($result)){ $resultName[$i++]=$property->name; } $this->close(); return $resultName; } } ?> |
接下来是测试了。我在phpmyadmin中建了一个test0数据库,里面建一张表user。然后用php写一个user类对应数据库中的user表。
user.class.php
代码如下 | 复制代码 |
<?php require_once("./db.class.php"); public function insert(){ public static function getAllUser(){ |
测试程序: test.php
代码如下 | 复制代码 |
<?php require_once("./user.class.php"); $user = new User("HelloWorld","123456"); $users = User::getAllUser(); foreach ($users as $u) { |
以工作的第一步就是要将数据从excel中取出来。这里我使用到了一个开源php处理excel类:phpexcel. 该项目的详细信息 http://phpexcel.codeplex.com/ 。
我目前使用的是phpexcel1.7.3版本, 解压缩后里面有一个PHPExcel和PHPExcel.php文件。
我们主要使用那个PHP文件。见下图文件目录结构
这个版本据说是可以支持excel2007,但是我使用2007编辑的xlsx是无法获得该库的支持。于是乎我就将它转化为2003。感觉支持地很好。
下面介绍一下具体的使用:
代码如下 | 复制代码 |
|
上面的主要功能是初始化相关的excel类,并装载excel第一个sheet
代码如下 | 复制代码 |
|
以上分别获得该表格的最大列值(字母表示如:‘G'),和最大的行数(数值表示)
下面将使用循环来讲excel里面的数据读到excel中:
代码如下 | 复制代码 |
|
下面简单地介绍一下phpexcel的写操作,这个操作经常用于将数据库中的数据导入到excel中,便于展示和做成更美观的效果。
代码如下 | 复制代码 |
$file_name = "output.xls"; |
用于将mysql数据用php导出到excel文件中,也许可以作为速成材料:
<?php
function to_excel($sql,$excel_name)//含参数为SQL语句、导出的excel文件名
{
include_once('PHPExcel/Classes/PHPExcel.php');//包含类文件
include_once('PHPExcel/Classes/PHPExcel/Writer/Excel2007.php');//包含类文件
$objPHPExcel=new PHPExcel();//新建一个excel文件类
$re=mysql_query($sql);//执行SQL得到数据集
$i=1;
while($list=mysql_fetch_row($re))//循环一行行获取数据
{
$objPHPExcel->getActiveSheet()->setCellValue('A'.$i,$list[0]);//excel的第A列第i行写入$list[0]
$objPHPExcel->getActiveSheet()->setCellValue('B'.$i,$list[1]);//依次类推
$objPHPExcel->getActiveSheet()->setCellValue('C'.$i,$list[2]);
$objPHPExcel->getActiveSheet()->setCellValue('D'.$i,$list[3]);
$objPHPExcel->getActiveSheet()->setCellValue('E'.$i,$list[4]);
$objPHPExcel->getActiveSheet()->setCellValue('F'.$i,$list[5]);
$objPHPExcel->getActiveSheet()->setCellValue('G'.$i,$list[6]);
$objPHPExcel->getActiveSheet()->setCellValue('H'.$i,$list[7]);
$objPHPExcel->getActiveSheet()->setCellValue('I'.$i,$list[8]);
$i++;
}
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);//将excel数据对象实例化为excel文件对象
$objWriter->save($excel_name.".xlsx");//导出并写入当前目录,按照$excel_name命名
echo "OK!已导出为".$excel_name;
}
?>
本文章来给各位同学介绍phpMyadmin创建Mysql数据库及独立数据库帐号建立,如果你不会mysql命令来创建数据库之类的我们可以使用phpmyadmin来完成哦。
phpMyadmin创建Mysql数据库和独立数据库帐号教程
在一个服务器上一般来讲都不止一个站点,更不止一个MySQL(和PHP搭配之最佳组合)数据库。
为了防止安全隐患,我们一般针对每个数据库都设置了独立的数据库访问帐号,该帐号仅有访问该数据库的权限。下面就让我们来具体演示一下:
1、首先我们要登陆phpMyAdmin(做为现在的主流开发语言),不做演示。
2、创建一个数据库,如下图,在phpMyAdmin(做为现在的主流开发语言)右边窗口中,填写数据库名称,点创建即可。
例如我们这里创建一个名字为:cncmstest 的数据库
创建成功会有如下提示:
3、点击左上角的主页按钮,返回phpMyAdmin(做为现在的主流开发语言)主界面:
4、在主界面的右边点击“权限”来创建数据库帐号。
5、在权限页面中,我们点击“添加新用户”
6、在该页面中,我们填写要创建的数据库用户名,该用户的访问范围,及密码。
如上图,我们填写了用户名为:cncmsuser,该数据库用户只允许本机访问,主机一项选择本地;密码我们使用自动生成的,点下面的“Generate”会生成一个随机密码,然后点“Copy”会自动填写到密码框中。
下面的框都不选,直接拉到页面最下面点执行即可创建一个新用户。
数据库用户创建成功,会返回如下页面:
7、最重要的一步,设置该用户的数据库访问权限
在数据库用户添加成功返回的页面中可以直接设置权限。这里我们选择按数据库指定权限:
如上图,在数据库列表中选择我们刚刚创建的cncmstest,即会自动进入该数据库的权限设置页面。
在上图的权限设置中,我们把“数据”、“结构”两列的权限全部选中,管理权限都不要选。点执行即可。
到这里,我们已经全部设置完毕了,创建了一个数据库:cncmstest,并创建了数据库用户cncmsuser,特别指定了该用户只对cncmstest的访问权限。如此,便达到了我们一开始所讲的目的:为每一个数据库指定独立的用户访问权限。
下面简单介绍了下利用命令创建数据库
.新建用户。
代码如下 | 复制代码 |
//登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> insert into mysql.user(Host,User,Password) values("localhost","phplamp",password("1234")); //刷新系统权限表 mysql>flush privileges; |
这样就创建了一个名为:phplamp 密码为:1234 的用户。
然后登录一下。
代码如下 | 复制代码 |
mysql>exit; |
2.为用户授权。
代码如下 | 复制代码 |
//登录MYSQL(有ROOT权限)。我里我以ROOT身份登录. /* |
3.删除用户。
代码如下 | 复制代码 |
@>mysql -u root -p @>密码 mysql>DELETE FROM user WHERE User="phplamp" and Host="localhost"; mysql>flush privileges; //删除用户的数据库 mysql>drop database phplampDB; |
4.修改指定用户密码。
代码如下 | 复制代码 |
@>mysql -u root -p @>密码 mysql>update mysql.user set password=password('新密码') where User="phplamp" and Host="localhost"; mysql>flush privileges; |
5.创建数据库
创建数据库
CREATE DATABASE 语句用于在 MySQL 中创建数据库。
语法
CREATE DATABASE database_name为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数。此函数用于向 MySQL 连接发送查询或命令。
例子
在下面的例子中,我们创建了一个名为 "my_db" 的数据库:
代码如下 | 复制代码 |
<?php if (mysql_query("CREATE DATABASE my_db",$con)) mysql_close($con); |
具体方法
修改php上传文件大小的几个配置参数
upload_max_filesize
memory_limit
post_max_size
php配置文件(默认php.ini)里面以上这三项的值都要改大
找到upload_max_filesize, memory_limit 和 post_max_size这3个参数
upload_max_filesize,上传文件大小
memory_limit 设置内存
post_max_size 提交数据的最大值
将其修改成你想要的数据。例如这里我将其修改成了300M,修改完成后,保存退出,然后重洗启动:
sudo /etc/init.d/apache2 restart
相关文章
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
- 这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
Antd-vue Table组件添加Click事件,实现点击某行数据教程
这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17- 这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- 在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
- 这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- 这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08