欢迎光临精准像素,本站所有资源仅供学习与参考,禁止用于商业用途或从事违法行为!

织梦cms教程

织梦CMS二次开发批量导入excel数据

织梦cms教程 精准像素 2020-09-02 人阅读

织梦CMS二次开发批量导入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开发完整的代码:

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');
set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
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']."
厂商为:".$v['A']."的数据已在表中,请在excel文件里面删除这一条后再添加!";
}
}
}
$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 = 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:;');
}


相关推荐
  • 织梦CMS二次开发
  • 织梦CMS二次开发缩略图变形的解决方法

    下面给大家介绍织梦CMS加水印图片会变形的解决方法,修改代码前先备份源码,以免出错第一:修改一个处理图片的函数位置:/include/image.func.php查找到:if($srcW<=$toW&& $srcH<=$toH) returntrue;大概在71行左右在下面加上if($srcW>$srcH){$toWH=$toH/$toW...

    织梦cms教程 97 1年前
  • 织梦CMS二次开发列表AJAX按条件排序

    DedeCMS实现列表页按时间,点击,评论,星级排序的方法还挺多的,最简单的莫过于生成自由列表。最近玩AJAX玩上瘾了,就分享用AJAX动态加载列表的方法。AJAX办法区别于生成自由列表,自由列表有许多优势:URL静态、独立的标题、描述、关键字,利于SEO优化;但是考虑...

    织梦cms教程 182 3年前
  • dedecms二次开发全站文章收藏总次数统计

    需要对网站所有文章的收藏量统计,但是织梦默认没有这个统计功能,下面就告诉大家详细开发过程!此过程需要对数据库进行操作,需要取得数据库权限,建议大家在操作前最好备份一下数据库以及文件。下面是详细步骤:第一步、新建数据库表dede_stows,我们以直接复制...

    织梦cms教程 158 2年前
  • 织梦CMS二次开发不同栏目调用不同的模板教程

    在建站过程中可能会有各种各样的要求,虽然我们可以给每个栏目指定不同的模板然后用include标签引用不同的头部或者底部模板,但是如果有很多个栏目,而且栏目模板又一样,这样去一个一个修改栏目模板就会显得比较麻烦,改那么多模板真是不容易,现在就给大家提...

    织梦cms教程 177 3年前
  • Dedecms二次开发sql数据库类详解

    今天花点时间讲解下织梦的sql数据库类,近期本来是准备录制一套视频教程的,但由于视频压缩的问题迟迟没有开展工作,如果大家有什么好的视频压缩方式可以通过邮件的方式告诉我:tianya#dedecms.com(#<=>@).目前视频主要想做成wmv或者rmvb这种格式的,里...

    织梦cms教程 92 1年前