对于一些企业网站或者淘宝客类网站经常会需要将一些excel的数据批量导入到网站,通过批量导入来节省时间而不是从网站后台一条一条的录入加数据。本教程就是以把excel数据导入到织梦系统(dedecms)为例子进行批量数据导入的开发,假设把excel数据导入到织梦主表dede_archives(还有微表和附加表,这里就用主表代表这三个表)里面。
批量导入excel数据原理:通过查询excel,把数据一条一条的读取出来,然后,通过我们开发的php程序把数据导入到表里面。
通过上面的原理我们知道,我们可以把批量导入excel数据分为两部分,一部分是开发出从excel读取数据的程序,另一部分是开发出把读取出来的数据插入到数据库表dede_archives里面。
从excel读取数据程序开发
其实,这一步有一个老外已经帮我们开发好了,这个老外开发了一套专门读取excel数据表的程序叫PHPExcel类库。
这个excel类库还包括其它的一些功能,这里不一一介绍,您可以下载来看看,这里只对读取excel进行讲解。
把读取出来的数据插入到主表dede_archives里面
当通过PHPExcel类库里面提供的类读取数据后,这一步就是把数据插入到数据库表里面,所以,这一个教程的开发其实就是在开发这一部分 ; 把从excel读取出来的数据插入到主表中的程序开发。
为了讲解方便,我们把插入数据库表中的数据的文件名叫做excelinert.php ,下面就在这个文件里面进入程序开发,把读取出来的数据插入到数据库表中。
插入数据开发原理
1)开发前的准备:
在excelinsert.php里面加入一个header头的编码,目的是为了统一编码以免出现乱码:header("Content-type:text/html;charset=utf8");
引入织梦系统的公共文件common.inc.php,为什么要引入这个文件,我们在插入数据库表前,首页要连接网站的数据库,如果不连接将无法插入数据库数据。要注意,引入文件的路径要改成您自己的,因为,我把织梦系统安装在了dedecms里面,所以,路径中有这个目录名称dedecms,如果您安装在根目录的话就去掉这个路径。
设置错误报告、设置时区、设置程序运行时间,当然,这个运行时间可以不设置、设置PHPExcel类的类库存路径,然后,引入IOFactory.php文件,这个文件是最重要的,本功能就是通过这个文件来处理的,这几个设置代码如下:
这些代码全是PHPExcel类里面提供的,所以,这里不用多解释。
2) 开发插入数据代码:
为了讲解方式,我们将直接以这种形式来插入数据:https://www.bnxb.com/excelinsert.php?dopost=exdata&typeid=6&n=test1
表示通过文件excelinert.php插入excel里面的名称为test1的里面的数据,把这些数据插入到织梦数据库表dede_archvies里面,栏目id为6的表中,其中,dopost=exdata表示插入数据口令,因为,作一个判断的话,那什么人也能插入到您的数据库表里面数据了,这是非常可怕的,就像一个网站没有后台一样,这是不是非常可能谁都可以进入网站后台里面,同样的,如果不加这个口令的话,谁都可以插入数据,这是不安全的。
所以,在插入数据前先通过$GET超级数组获取到typeid、do和n的值,然后,进行对比看看有没有权限进行插入数据库操作,第一个判断应当是判断口令是否正确,如果这个都不正确的话,就不再向下操作了。
为了讲解方便,下面提供excelinsert.php开发完整的代码:
001 | header( "Content-type:text/html;charset=utf8" ); |
003 | require_once( '/../dedecms/include/common.inc.php' ); |
005 | error_reporting(E_ALL); |
009 | date_default_timezone_set( 'Europe/London' ); |
013 | set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/' ); |
015 | /** PHPExcel_IOFactory */ |
017 | include 'PHPExcel/IOFactory.php' ; |
021 | $typeid = $_GET[ 'typeid' ]; |
023 | $dopost = $_GET[ 'do' ]; |
025 | if ($dopost == "exdata" ){ |
027 | if (!empty($_GET[ 'n' ])){ |
029 | $inputFileName = './' .$_GET[ 'n' ]. '.xlsx' ; |
031 | $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); |
033 | $sheetData = $objPHPExcel->getActiveSheet()->toArray(null, true , true , true ); |
037 | $dsql->Execute( 'all' , "select bio2,bio1 from `dede_addonshop`" ); |
039 | while ($rowall = $dsql->GetArray( 'all' )) { |
045 | foreach ($sheetData as $ v ) { |
047 | foreach ($rowarr as $vt) { |
049 | if (in_array($ v [ 'B' ],$vt)&&$ v [ 'A' ]==$vt[ 'bio1' ]){ |
053 | 的数据已在表中,请在excel文件里面删除这一条后再添加!"; |
063 | $row = $dsql->GetOne( "select aid,bio2 from `dede_addonshop` order by aid desc" ); |
081 | if ($bio2==$sheetData[count($sheetData)][ 'B' ]){ |
083 | ShowMsg( "不能重复添加内容" , 'javascript:;' ); |
091 | $arcrow = $dsql->GetOne( "select id from `dede_archives` order by id desc" ); |
095 | $arcid = $arcrow[ 'id' ]; |
105 | $tinyrow = $dsql->GetOne( "select id from `dede_arctiny` order by id desc" ); |
109 | $tinyid = $tinyrow[ 'id' ]; |
119 | $ id = max($aid,$arcid,$tinyid); |
121 | $alphalpha = array( 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , 'AA' , 'AB' , 'AC' , 'AD' , 'AE' , 'AF' , 'AG' , 'AH' , 'AI' , 'AJ' , 'AK' , 'AL' , 'AM' , 'AN' , 'AO' , 'AP' , 'AQ' , 'AR' , 'AS' , 'AT' , 'AU' , 'AV' , 'AW' , 'AX' , 'AY' , 'AZ' ); |
125 | $fieldnum = count($sheetData[1]); |
127 | $fields = $fieldvalue = '' ; |
129 | for ($i=0; $i < $fieldnum; $i++) { |
131 | $fields .= $sheetData[1][$alphalpha[$i]]. ',' ; |
135 | $fields = substr($fields, 0,-1); |
139 | foreach ($sheetData as $value) { |
141 | $pubdate = GetMkTime(GetDateTimeMk( time ())); |
143 | $click = mt_rand(50, 200); |
145 | if ($value[ 'A' ]== 'bio1' |$value[ 'A' ]== '厂商' ){ |
155 | for ($i=0; $i < $fieldnum; $i++) { |
157 | $fieldvalue .= " ,'" .$value[$alphalpha[$i]]. "' " ; |
163 | $C = trim($value[ 'C' ]); |
169 | $arcquery = "INSERT INTO `dede_archives`(id,typeid,title,mid,channel,pubdate,senddate,click,ismake)VALUES ('$id','$typeid','$C','1','6','$pubdate','$senddate','$click','-1');" ; |
171 | $dsql->ExecuteNoneQuery($arcquery); |
175 | $query = "INSERT INTO `dede_addonshop`(aid,typeid,$fields) |
177 | VALUES ( '$id' , '$typeid' {$fieldvalue});"; |
179 | $dsql->ExecuteNoneQuery($query); |
185 | $tinyquery = "INSERT INTO `dede_arctiny`(id,typeid,channel,mid,senddate)VALUES ('$id','$typeid','6','1','$senddate');" ; |
187 | $dsql->ExecuteNoneQuery($tinyquery); |
191 | $num = count($sheetData)-2; |
193 | ShowMsg( "恭喜,成功插入 " .$num. " 条数据!" , 'javascript:;' ); |
本文链接:http://78moban.cn/post/4217.html
版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!