DEDE Excel 데이터를 백엔드로 일괄 가져오는 방법은 무엇입니까?
Excel 데이터를 백엔드 기사 시스템으로 일괄 가져오기 위한 DEDE 개발 튜토리얼
일부 기업 웹사이트나 Taobao 고객 웹사이트의 경우 일부 Excel 데이터를 웹사이트로 일괄 가져와야 하는 경우가 종종 있습니다. 웹사이트의 백엔드는 데이터를 하나씩 입력하고 추가하며, 이는 특정 참조 가치가 있습니다. 관심 있는 친구들이 참조할 수 있습니다.
추천 학습: Dreamweaver cms
일부 기업 웹사이트나 Taobao 고객 웹사이트의 경우 종종 필요한 경우가 있습니다. 일부 가져오기 Excel 데이터를 웹사이트에 일괄적으로 추가하려면 웹사이트 배경에서 데이터를 하나씩 입력하고 추가하는 대신 일괄 가져오기를 통해 시간을 절약하세요. 이 튜토리얼에서는 Excel 데이터를 Dreamweaver 시스템(dedecms)으로 가져오는 예제를 사용하여 일괄 데이터 가져오기를 개발합니다. Excel 데이터를 Dreamweaver 기본 테이블 dede_archives로 가져오는 것으로 가정합니다(마이크로 테이블과 추가 테이블도 있고 기본 테이블도 있습니다). table은 여기서 이 세 개의 테이블을 나타내기 위해 사용되었습니다.) 내부.
엑셀 데이터 일괄 가져오기의 원리: 엑셀을 쿼리하여 데이터를 하나씩 읽은 후, 우리가 개발한 php 프로그램을 통해 데이터를 테이블로 가져옵니다.
위의 원칙을 통해 우리는 엑셀 데이터 일괄 가져오기를 두 부분으로 나눌 수 있다는 것을 알았습니다. 한 부분은 엑셀에서 데이터를 읽는 프로그램을 개발하는 것이고, 다른 부분은 읽은 데이터를 삽입하는 프로그램을 개발하는 것입니다. 데이터베이스 테이블 dede_archives에.
Excel에서 데이터를 읽는 프로그램 개발
사실 외국인은 이미 이 단계를 개발하는 데 도움을 주었습니다. 이 외국인은 PHPExcel 클래스 라이브러리라는 Excel 데이터 테이블을 읽는 데 특화된 프로그램 세트를 개발했습니다.
이 Excel 클래스 라이브러리에는 다른 기능도 포함되어 있습니다. 여기서는 하나씩 소개하지 않겠습니다. 여기서는 Excel 읽기만 설명하겠습니다.
읽은 데이터를 메인 테이블 dede_archives에 삽입
PHPExcel 클래스 라이브러리에서 제공하는 클래스를 통해 데이터를 읽은 후 데이터베이스 테이블에 데이터를 삽입하는 단계이므로 실제로 이 튜토리얼의 개발은 이렇습니다. 엑셀에서 읽은 데이터를 메인 테이블에 삽입하는 프로그램 개발의 일부입니다.
설명의 편의를 위해 데이터베이스 테이블에 데이터를 삽입하는 파일의 이름을 excelinert.php로 지정하겠습니다. 이제 이 파일에 프로그램 개발을 입력하고 읽은 데이터를 데이터베이스 테이블에 삽입하겠습니다.
데이터 개발 원칙 삽입
1) 개발 전 준비 사항:
문자 깨짐을 방지하기 위해 인코딩을 통일하기 위해 excelinsert.php에 헤더 인코딩을 추가합니다. header("Content-type:text/html;charset =utf8" );
DreamWeaver 시스템의 공용 파일인 common.inc.php를 소개합니다. 데이터베이스 테이블을 삽입하기 전에 홈페이지가 웹사이트의 데이터베이스에 연결되어야 하는 이유는 무엇입니까? 데이터베이스 데이터를 삽입할 수 없습니다. DreamWeaver 시스템을 dedecms에 설치했기 때문에 가져온 파일의 경로를 사용자 고유의 경로로 변경해야 하므로 경로에 dedecms라는 디렉터리 이름이 있으므로 루트 디렉터리에 설치하는 경우 이 경로를 제거하세요.
오류 보고서를 설정하고, 시간대를 설정하고, 프로그램 실행 시간을 설정합니다. 물론 이 실행 시간은 PHPExcel 클래스의 클래스 인벤토리 경로를 설정한 다음 IOFactory.php 파일을 도입할 필요가 없습니다. 이 파일이 가장 중요합니다. 이 파일은 이러한 설정을 처리하는 데 사용됩니다.
이 코드는 모두 PHPExcel 클래스에서 제공되므로 여기서는 추가 설명이 필요하지 않습니다.
2) 데이터 삽입을 위한 코드 개발:
은 excelinert.php 파일을 통해 Excel에 test1이라는 데이터를 삽입하고 이러한 데이터를 Dreamweaver 데이터베이스 테이블 dede_archvies에 삽입하는 것을 의미합니다. 열 ID는 6입니다. 여기서 , dopost=exdata는 다음을 의미합니다. 데이터 비밀번호 삽입, 왜냐하면 판단을 내리면 누구나 데이터베이스 테이블에 데이터를 삽입할 수 있기 때문입니다. 이는 백엔드가 없는 웹사이트처럼 매우 무섭습니다. 누구나 웹사이트의 백엔드에 들어갈 수 있습니까? , 이 비밀번호를 추가하지 않으면 누구나 데이터를 삽입할 수 있으므로 안전하지 않습니다.
그러므로 데이터를 삽입하기 전에 먼저 $GET 슈퍼 배열을 통해 typeid, do 및 n 값을 얻은 다음 데이터베이스에 삽입할 권한이 있는지 비교하십시오. 비밀번호가 정확하지 않으면 더 이상의 작업이 수행되지 않습니다.
설명의 편의를 위해 excelinsert.php 개발을 위한 전체 코드가 아래에 제공됩니다.
<?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 "密码或文件名错误!您无权做任何操作!"; } ?>
위는 데이터베이스의 기본 테이블 dede_archives에 Excel의 데이터를 삽입하는 전체 코드이며 실제로 테스트되었습니다. 전혀 문제 없습니다.만들어도 안되면 소개해주신 common.inc.php 경로와 소개하신 PHPExcel 클래스 라이브러리 Classess 클래스에 문제가 있을 수 있습니다. 이 두 곳을 확인해 보세요.
코드 분석
1)第一步先判断问号后面是不是为空,即dopost=exdata&typeid=6&n=test1字符串是否为空,如果这个字符串都是空的话,其它,就不用操作了,直接通过出程序,显示:echo "密码或文件名错误!您无权做任何操作!";
只有当if(!empty($_GET))条件成立时,才有可能进入插入操作。
然后,获取typeid和do的值:
$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都是不同的,如果全一样的话,可能网站里面显示数据就只有一条了,其它的全部被覆盖掉了。
위 내용은 DEDE 일괄 처리는 Excel 데이터를 백엔드로 어떻게 가져오나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!