设为首页 - 加入收藏 站长在线 - 常用服务器软件 - 在线站长工具 - 在线伪原创工具
您的当前位置:主页 > CMS教程 > dedecms > 正文

DEDE批量导入excel数据到靠山文章体系的开拓教程

来源:未知 编辑:zzwww 时间:2019-12-13

对付一些企业网站可能淘宝客类网站常常会必要将一些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) 开拓插入数据代码:

暗示通过文件excelinert.php插入excel内里的名称为test1的内里的数据,把这些数据插入到织梦数据库表dede_archvies内里,栏目id为6的表中,个中,dopost=exdata暗示插入数据口令,由于,作一个判定的话,那什么人也能插入到您的数据库表内里数据了,这长短常可骇的,就像一个网站没有靠山一样,这是不长短常也许谁都可以进入网站靠山内里,同样的,假如不加这个口令的话,谁都可以插入数据,这是不安详的。

以是,在插入数据前先通过$GET超等数组获取到typeid、do和n的值,然后,举办比拟看看有没有权限举办插入数据库操纵,第一个判定该当是判定口令是否正确,,假如这个都不正确的话,就不再向下操纵了。

为了讲授利便,下面提供excelinsert.php开拓完备的代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
header("Content-type:text/html;charset=utf8");
require_once('/../dedecms/include/common.inc.php');
 
error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
/** PHPExcel_IOFactory */
include 'PHPExcel/IOFactory.php';
if(!empty($_GET)){
    $typeid = $_GET['typeid'];
    $dopost = $_GET['do'];
    if($dopost == "exdata"){
            if(!empty($_GET['n'])){
                $inputFileName = './'.$_GET['n'].'.xlsx';
                $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
                $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
                $rowarr=array();
                $dsql->Execute('all',"select bio2,bio1 from `dede_addonshop`");
                while ($rowall = $dsql->GetArray('all')) {
                      $rowarr[]=$rowall;
                }
foreach ($sheetData as $v) {
    foreach ($rowarr as $vt) {
        if(in_array($v['B'],$vt)&&$v['A']==$vt['bio1']){
            echo "货号为:".$v['B']."<br>厂商为:".$v['A']."<br>的数据已在表中,请在excel文件内里删除这一条后再添加!";
            exit;
        }
    }
}
                //附加表插入数据前处理赏罚
                $row = $dsql->GetOne("select aid,bio2 from `dede_addonshop` order by aid desc");
                if(!empty($row)){
                    $aid = $row['aid'];
                    $bio2 = $row['bio2'];
                }else{
                    $aid = 0;
                    $bio2 = '';
                }
                //处理赏罚一再题目
                 if($bio2==$sheetData[count($sheetData)]['B']){
                  ShowMsg("不能一再添加内容",'javascript:;');
                  exit;
                  }
               //主表插入数据前处理赏罚
                $arcrow = $dsql->GetOne("select id from `dede_archives` order by id desc");
                if(!empty($arcrow)){
                    $arcid = $arcrow['id'];
                }else{
                    $arcid = 0;
                }
               //微表插入数据前处理赏罚
                $tinyrow = $dsql->GetOne("select id from `dede_arctiny` order by id desc");
                if(!empty($tinyrow)){
                    $tinyid = $tinyrow['id'];
                }else{
                    $tinyid = 0;
                }
                //找出最大的id
               $id = max($aid,$arcid,$tinyid);
               $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');
               //字段数目
               $fieldnum = count($sheetData[1]);
               $fields = $fieldvalue = '';
               for ($i=0; $i < $fieldnum; $i++) {
                      $fields .= $sheetData[1][$alphalpha[$i]]. ',';
                 }
               $fields = substr($fields, 0,-1);
              //遍历数组
              foreach ($sheetData as $value) {
                   $pubdate = GetMkTime(GetDateTimeMk(time()));
                   $click = mt_rand(50, 200);
                     if($value['A']=='bio1'|$value['A']=='厂商'){
                                continue;
                            }
                      $id = $id+1;
                       //获取字段值$value['A'];
                        for ($i=0; $i < $fieldnum; $i++) {
                               $fieldvalue .= " ,'".$value[$alphalpha[$i]]."' ";
                         }
                     //问题
                     $C = trim($value['C']);
                    //生涯到主表
                     $senddate = time();
                     $arcquery = "INSERT INTO `dede_archives`(id,typeid,title,mid,channel,pubdate,senddate,click,ismake)VALUES ('$id','$typeid','$C','1','6','$pubdate','$senddate','$click','-1');";
                      $dsql->ExecuteNoneQuery($arcquery);
                    //生涯到四面加表
                    $query = "INSERT INTO `dede_addonshop`(aid,typeid,$fields)
                    VALUES ('$id','$typeid'{$fieldvalue});";
                    $dsql->ExecuteNoneQuery($query);
                    $fieldvalue = '';
                    //生涯到微表
                    $tinyquery = "INSERT INTO `dede_arctiny`(id,typeid,channel,mid,senddate)VALUES ('$id','$typeid','6','1','$senddate');";
                    $dsql->ExecuteNoneQuery($tinyquery);
                 }
        $num = count($sheetData)-2;
        ShowMsg("恭喜,乐成插入   ".$num."   条数据!",'javascript:;');
      }
    }
}else{
    echo "暗码或文件名错误!您无权做任何操纵!";
}
?>

以上就是完备的把excel内里数据插入到数据库主表dede_archives内里的代码,是颠末现实测试的完全没有题目,假如你做出来不可的话,也许是您引入的common.inc.php路径和引入的PHPExcel类库Classess类有题目,如有题目请搜查这两个位置。 

代码说明

1)第一步先判定问号后头是不是为空,即dopost=exdata&typeid=6&n=test1字符串是否为空,假如这个字符串都是空的话,其余,就别用操纵了,直接通过出措施,表现:echo "暗码或文件名错误!您无权做任何操纵!";

只有当if(!empty($_GET))前提创立时,才有也许进入插入操纵。

然后,获取typeid和do的值:

?
1
2
$typeid = $_GET['typeid'];
$dopost = $_GET['do'];

由于下面要对要插入到数据库表中数据时还要举办口令的判定,以是,这里获取do的值是必需的,可是,这里为什么一路要获取栏目id的值呢?由于,这里根基上要到最后一步才行使,为什么不比及行使时再获取呢?假如暗码差池或其余缘故起因的话,不能举办插入操纵,那不是白白获取了$typeid的值,从代码优化的角度,这样不是最优的,可是,列位请留意,由于,下面要对获取到的$GET的数组举办操纵,以是,为了保险起见,这时大这个位置先获取到栏目id的值,这样可以担保不会在后头堕落,虽然,假如您在开拓时,能担保不会堕落可以在行使$typeid时再获取也可以。

然后,判定口令是否正确,即if($dopost=="exdata")是否为真,若为真声名我们在赏识器地点栏输入的口令就是正确的,不然,就是错误的,假如堕落出退出措施不做任何操纵。

假如正确,则获取n的值,文件excel的文件名$inputFileName。

然后,通过PHPExcel类获取到excel文件内里的数据生涯到数组$sheetData内里。

2)判定要插入的数据是否已经存在于表dede_addonshop内里。

查询附加表dede_addonshop内里的字段bio2,bio1,并把查询出来的一维数组放到二维数组$rowall内里。

由于,把一条数据插入到织梦体系内里后,着实,是在织梦的主表、附加表和微表进入了插入操纵,以是,在插入前都要先判定一下插入的数据是不是在这三个表中都已经存在了,假如已经存在了就不要进入插入操纵了。

3)插入数据库表时最大数据id的判定

当向主表或附加表或微表加插入数据库前,还要判定一下这时主表或附加表或微表内里最大的id,把这个id查询出来,进入比拟即:$id = max($aid,$arcid,$tinyid);

这样比拟往后获取到的$id的值就是最大的,获取这个最大的$id后,就可以在这个$id的根基上增进$id,譬喻,当前表中最大的id为9,那么,下面我们在插入数据时对应的id值就是从10开始,这长短常重要的,假如不做这个判定,那么,就会把原本的数据给包围掉。

3)遍历数组$sheetData插入数据

由于,通过PHPExcel获取到的数据是生涯在$sheetData二维数据内里,相同array(array('a','b'),array('b','c')),以是,在遍历这个数组,然后,把这个数组内里的数据插入到织梦的主表、微表和附加表内里。

这里要留意$id = $id+1,这行代码为什么要做这行代码,是由于,假如没有这行代码那么,在插入数据时id的值一向是统一个,譬喻,$id=9,这样一向是9,这是不行能的,由于,一个网站面的每一篇文章的id都是差异的,假如全一样的话,也许网站内里表现数据就只有一条了,其余的所有被包围掉了。

以上就是本文的所有内容,但愿对列位的进修有所辅佐,也但愿列位多多支持站长在线。


TAG标签:

网友评论:

文章右边250
Top