织梦DEDECMS批量导入excel数据到后台文章系统的开发教程
对于一些企业网站或者淘宝客类网站经常会需要将一些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文件,这个文件是最重要的,本功能就是通过这个文件来处理的,这几个设置代码如下:
织梦DEDECMS批量导入excel数据到后台文章系统的开发教程
这些代码全是PHPExcel类里面提供的,所以,这里不用多解释。
2) 开发插入数据代码:
为了讲解方式,我们将直接以这种形式来插入数据:
表示通过文件excelinert.php插入excel里面的名称为test1的里面的数据,把这些数据插入到织梦数据库表dede_archvies里面,栏目id为6的表中,其中,dopost=exdata表示插入数据口令,因为,作一个判断的话,那什么人也能插入到您的数据库表里面数据了,这是非常可怕的,就像一个网站没有后台一样,这是不是非常可能谁都可以进入网站后台里面,同样的,如果不加这个口令的话,谁都可以插入数据,这是不安全的。
所以,在插入数据前先通过$GET超级数组获取到typeid、do和n的值,然后,进行对比看看有没有权限进行插入数据库操作,第一个判断应当是判断口令是否正确,如果这个都不正确的话,就不再向下操作了。
为了讲解方便,下面提供excelinsert.php开发完整的代码: - 001
- header("Content-type:text/html;charset=utf8");
- 002
-
- 003
- require_once('/../dedecms/include/common.inc.php');
- 004
-
- 005
- error_reporting(E_ALL);
- 006
-
- 007
- set_time_limit(0);
- 008
-
- 009
- date_default_timezone_set('Europe/London');
- 010
-
- 011
- /** Include path **/
- 012
-
- 013
- set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
- 014
-
- 015
- /** PHPExcel_IOFactory */
- 016
-
- 017
- include 'PHPExcel/IOFactory.php';
- 018
-
- 019
- if(!empty($_GET)){
- 020
-
- 021
- $typeid = $_GET['typeid'];
- 022
-
- 023
- $dopost = $_GET['do'];
- 024
-
- 025
- if($dopost == "exdata"){
- 026
-
- 027
- if(!empty($_GET['n'])){
- 028
-
- 029
- $inputFileName = './'.$_GET['n'].'.xlsx';
- 030
-
- 031
- $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
- 032
-
- 033
- $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
- 034
-
- 035
- $rowarr=array();
- 036
-
- 037
- $dsql->Execute('all',"select bio2,bio1 from `dede_addonshop`");
- 038
-
- 039
- while ($rowall = $dsql->GetArray('all')) {
- 040
-
- 041
- $rowarr[]=$rowall;
- 042
-
- 043
- }
- 044
-
- 045
- foreach ($sheetData as $v) {
- 046
-
- 047
- foreach ($rowarr as $vt) {
- 048
-
- 049
- if(in_array($v['B'],$vt)&&$v['A']==$vt['bio1']){
- 050
-
- 051
- echo "货号为:".$v['B']."
- 052
- 厂商为:".$v['A']."
- 053
- 的数据已在表中,请在excel文件里面删除这一条后再添加!";
- 054
-
- 055
- exit;
- 056
- }
- 057
-
- 058
- }
- 059
- }
- 060
-
- 061
- //附加表插入数据前处理
- 062
-
- 063
- $row = $dsql->GetOne("select aid,bio2 from `dede_addonshop` order by aid desc");
- 064
-
- 065
- if(!empty($row)){
- 066
-
- 067
- $aid = $row['aid'];
- 068
-
- 069
- $bio2 = $row['bio2'];
- 070
-
- 071
- }else{
- 072
-
- 073
- $aid = 0;
- 074
-
- 075
- $bio2 = '';
- 076
-
- 077
- }
- 078
-
- 079
- //处理重复问题
- 080
-
- 081
- if($bio2==$sheetData[count($sheetData)]['B']){
- 082
-
- 083
- ShowMsg("不能重复添加内容",'javascript:;');
- 084
-
- 085
- exit;
- 086
-
- 087
- }
- 088
-
- 089
- //主表插入数据前处理
- 090
-
- 091
- $arcrow = $dsql->GetOne("select id from `dede_archives` order by id desc");
- 092
-
- 093
- if(!empty($arcrow)){
- 094
-
- 095
- $arcid = $arcrow['id'];
- 096
-
- 097
- }else{
- 098
-
- 099
- $arcid = 0;
- 100
-
- 101
- }
- 102
-
- 103
- //微表插入数据前处理
- 104
-
- 105
- $tinyrow = $dsql->GetOne("select id from `dede_arctiny` order by id desc");
- 106
-
- 107
- if(!empty($tinyrow)){
- 108
-
- 109
- $tinyid = $tinyrow['id'];
- 110
-
- 111
- }else{
- 112
-
- 113
- $tinyid = 0;
- 114
-
- 115
- }
- 116
-
- 117
- //找出最大的id
- 118
-
- 119
- $id = max($aid,$arcid,$tinyid);
- 120
-
- 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');
- 122
-
- 123
- //字段数量
- 124
-
- 125
- $fieldnum = count($sheetData[1]);
- 126
-
- 127
- $fields = $fieldvalue = '';
- 128
-
- 129
- for ($i=0; $i < $fieldnum; $i++) {
- 130
-
- 131
- $fields .= $sheetData[1][$alphalpha[$i]]. ',';
- 132
-
- 133
- }
- 134
-
- 135
- $fields = substr($fields, 0,-1);
- 136
-
- 137
- //遍历数组
- 138
-
- 139
- foreach ($sheetData as $value) {
- 140
-
- 141
- $pubdate = GetMkTime(GetDateTimeMk(time()));
- 142
-
- 143
- $click = mt_rand(50, 200);
- 144
-
- 145
- if($value['A']=='bio1'|$value['A']=='厂商'){
- 146
-
- 147
- continue;
- 148
-
- 149
- }
- 150
-
- 151
- $id = $id+1;
- 152
-
- 153
- //获取字段值$value['A'];
- 154
-
- 155
- for ($i=0; $i < $fieldnum; $i++) {
- 156
-
- 157
- $fieldvalue .= " ,'".$value[$alphalpha[$i]]."' ";
- 158
-
- 159
- }
- 160
-
- 161
- //标题
- 162
-
- 163
- $C = trim($value['C']);
- 164
-
- 165
- //保存到主表
- 166
-
- 167
- $senddate = time();
- 168
-
- 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');";
- 170
-
- 171
- $dsql->ExecuteNoneQuery($arcquery);
- 172
-
- 173
- //保存到附近加表
- 174
-
- 175
- $query = "INSERT INTO `dede_addonshop`(aid,typeid,$fields)
- 176
-
- 177
- VALUES ('$id','$typeid'{$fieldvalue});";
- 178
-
- 179
- $dsql->ExecuteNoneQuery($query);
- 180
-
- 181
- $fieldvalue = '';
- 182
-
- 183
- //保存到微表
- 184
-
- 185
- $tinyquery = "INSERT INTO `dede_arctiny`(id,typeid,channel,mid,senddate)VALUES ('$id','$typeid','6','1','$senddate');";
- 186
-
- 187
- $dsql->ExecuteNoneQuery($tinyquery);
- 188
-
- 189
- }
- 190
-
- 191
- $num = count($sheetData)-2;
- 192
-
- 193
- ShowMsg("恭喜,成功插入 ".$num." 条数据!",'javascript:;');
- 194
-
- 195
- }
复制代码 |