ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

织梦二次开发数据到后台教程

2021-01-18 21:32:40  阅读:165  来源: 互联网

标签:教程 插入 dede excel 织梦 二次开发 php 数据 id


对于一些企业网站或者淘宝客类网站经常会需要将一些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.win1388.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开发完整的代码:

1
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
}

 

标签:教程,插入,dede,excel,织梦,二次开发,php,数据,id
来源: https://www.cnblogs.com/degkr/p/14295305.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有