最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

DEDE批量導(dǎo)入excel數(shù)據(jù)到后臺(tái)文章系統(tǒng)的開(kāi)發(fā)教程

  發(fā)布時(shí)間:2019-02-25 17:06:54   作者:佚名   我要評(píng)論
對(duì)于一些企業(yè)網(wǎng)站或者淘寶客類網(wǎng)站經(jīng)常會(huì)需要將一些excel的數(shù)據(jù)批量導(dǎo)入到網(wǎng)站,通過(guò)批量導(dǎo)入來(lái)節(jié)省時(shí)間而不是從網(wǎng)站后臺(tái)一條一條的錄入加數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

對(duì)于一些企業(yè)網(wǎng)站或者淘寶客類網(wǎng)站經(jīng)常會(huì)需要將一些excel的數(shù)據(jù)批量導(dǎo)入到網(wǎng)站,通過(guò)批量導(dǎo)入來(lái)節(jié)省時(shí)間而不是從網(wǎng)站后臺(tái)一條一條的錄入加數(shù)據(jù)。本教程就是以把excel數(shù)據(jù)導(dǎo)入到織夢(mèng)系統(tǒng)(dedecms)為例子進(jìn)行批量數(shù)據(jù)導(dǎo)入的開(kāi)發(fā),假設(shè)把excel數(shù)據(jù)導(dǎo)入到織夢(mèng)主表dede_archives(還有微表和附加表,這里就用主表代表這三個(gè)表)里面。

批量導(dǎo)入excel數(shù)據(jù)原理:通過(guò)查詢excel,把數(shù)據(jù)一條一條的讀取出來(lái),然后,通過(guò)我們開(kāi)發(fā)的php程序把數(shù)據(jù)導(dǎo)入到表里面。

通過(guò)上面的原理我們知道,我們可以把批量導(dǎo)入excel數(shù)據(jù)分為兩部分,一部分是開(kāi)發(fā)出從excel讀取數(shù)據(jù)的程序,另一部分是開(kāi)發(fā)出把讀取出來(lái)的數(shù)據(jù)插入到數(shù)據(jù)庫(kù)表dede_archives里面。

從excel讀取數(shù)據(jù)程序開(kāi)發(fā)

其實(shí),這一步有一個(gè)老外已經(jīng)幫我們開(kāi)發(fā)好了,這個(gè)老外開(kāi)發(fā)了一套專門讀取excel數(shù)據(jù)表的程序叫PHPExcel類庫(kù)。

這個(gè)excel類庫(kù)還包括其它的一些功能,這里不一一介紹,您可以下載來(lái)看看,這里只對(duì)讀取excel進(jìn)行講解。

把讀取出來(lái)的數(shù)據(jù)插入到主表dede_archives里面

當(dāng)通過(guò)PHPExcel類庫(kù)里面提供的類讀取數(shù)據(jù)后,這一步就是把數(shù)據(jù)插入到數(shù)據(jù)庫(kù)表里面,所以,這一個(gè)教程的開(kāi)發(fā)其實(shí)就是在開(kāi)發(fā)這一部分 ; 把從excel讀取出來(lái)的數(shù)據(jù)插入到主表中的程序開(kāi)發(fā)。

為了講解方便,我們把插入數(shù)據(jù)庫(kù)表中的數(shù)據(jù)的文件名叫做excelinert.php ,下面就在這個(gè)文件里面進(jìn)入程序開(kāi)發(fā),把讀取出來(lái)的數(shù)據(jù)插入到數(shù)據(jù)庫(kù)表中。

插入數(shù)據(jù)開(kāi)發(fā)原理

1)開(kāi)發(fā)前的準(zhǔn)備:

在excelinsert.php里面加入一個(gè)header頭的編碼,目的是為了統(tǒng)一編碼以免出現(xiàn)亂碼:header("Content-type:text/html;charset=utf8");

引入織夢(mèng)系統(tǒng)的公共文件common.inc.php,為什么要引入這個(gè)文件,我們?cè)诓迦霐?shù)據(jù)庫(kù)表前,首頁(yè)要連接網(wǎng)站的數(shù)據(jù)庫(kù),如果不連接將無(wú)法插入數(shù)據(jù)庫(kù)數(shù)據(jù)。要注意,引入文件的路徑要改成您自己的,因?yàn)?,我把織?mèng)系統(tǒng)安裝在了dedecms里面,所以,路徑中有這個(gè)目錄名稱dedecms,如果您安裝在根目錄的話就去掉這個(gè)路徑。

設(shè)置錯(cuò)誤報(bào)告、設(shè)置時(shí)區(qū)、設(shè)置程序運(yùn)行時(shí)間,當(dāng)然,這個(gè)運(yùn)行時(shí)間可以不設(shè)置、設(shè)置PHPExcel類的類庫(kù)存路徑,然后,引入IOFactory.php文件,這個(gè)文件是最重要的,本功能就是通過(guò)這個(gè)文件來(lái)處理的,這幾個(gè)設(shè)置代碼如下:

這些代碼全是PHPExcel類里面提供的,所以,這里不用多解釋。

2) 開(kāi)發(fā)插入數(shù)據(jù)代碼:

表示通過(guò)文件excelinert.php插入excel里面的名稱為test1的里面的數(shù)據(jù),把這些數(shù)據(jù)插入到織夢(mèng)數(shù)據(jù)庫(kù)表dede_archvies里面,欄目id為6的表中,其中,dopost=exdata表示插入數(shù)據(jù)口令,因?yàn)?,作一個(gè)判斷的話,那什么人也能插入到您的數(shù)據(jù)庫(kù)表里面數(shù)據(jù)了,這是非??膳碌模拖褚粋€(gè)網(wǎng)站沒(méi)有后臺(tái)一樣,這是不是非??赡苷l(shuí)都可以進(jìn)入網(wǎng)站后臺(tái)里面,同樣的,如果不加這個(gè)口令的話,誰(shuí)都可以插入數(shù)據(jù),這是不安全的。

所以,在插入數(shù)據(jù)前先通過(guò)$GET超級(jí)數(shù)組獲取到typeid、do和n的值,然后,進(jìn)行對(duì)比看看有沒(méi)有權(quán)限進(jìn)行插入數(shù)據(jù)庫(kù)操作,第一個(gè)判斷應(yīng)當(dāng)是判斷口令是否正確,如果這個(gè)都不正確的話,就不再向下操作了。

為了講解方便,下面提供excelinsert.php開(kāi)發(fā)完整的代碼:

<?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 "貨號(hào)為:".$v['B']."<br>廠商為:".$v['A']."<br>的數(shù)據(jù)已在表中,請(qǐng)?jiān)趀xcel文件里面刪除這一條后再添加!";
            exit;
        }
    }
}
                //附加表插入數(shù)據(jù)前處理
                $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 = '';
                }
                //處理重復(fù)問(wèn)題
                 if($bio2==$sheetData[count($sheetData)]['B']){
                  ShowMsg("不能重復(fù)添加內(nèi)容",'javascript:;');
                  exit;
                  }
               //主表插入數(shù)據(jù)前處理
                $arcrow = $dsql->GetOne("select id from `dede_archives` order by id desc");
                if(!empty($arcrow)){
                    $arcid = $arcrow['id'];
                }else{
                    $arcid = 0;
                }
               //微表插入數(shù)據(jù)前處理
                $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');
               //字段數(shù)量
               $fieldnum = count($sheetData[1]);
               $fields = $fieldvalue = '';
               for ($i=0; $i < $fieldnum; $i++) {
                      $fields .= $sheetData[1][$alphalpha[$i]]. ',';
                 }
               $fields = substr($fields, 0,-1);
              //遍歷數(shù)組
              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]]."' ";
                         }
                     //標(biāo)題
                     $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."   條數(shù)據(jù)!",'javascript:;');
      }
    }
}else{
    echo "密碼或文件名錯(cuò)誤!您無(wú)權(quán)做任何操作!";
}
?>

以上就是完整的把excel里面數(shù)據(jù)插入到數(shù)據(jù)庫(kù)主表dede_archives里面的代碼,是經(jīng)過(guò)實(shí)際測(cè)試的完全沒(méi)有問(wèn)題,如果你做出來(lái)不行的話,可能是您引入的common.inc.php路徑和引入的PHPExcel類庫(kù)Classess類有問(wèn)題,若有問(wèn)題請(qǐng)檢查這兩個(gè)地方。 

代碼分析

1)第一步先判斷問(wèn)號(hào)后面是不是為空,即dopost=exdata&typeid=6&n=test1字符串是否為空,如果這個(gè)字符串都是空的話,其它,就不用操作了,直接通過(guò)出程序,顯示:echo "密碼或文件名錯(cuò)誤!您無(wú)權(quán)做任何操作!";

只有當(dāng)if(!empty($_GET))條件成立時(shí),才有可能進(jìn)入插入操作。

然后,獲取typeid和do的值:

$typeid = $_GET['typeid'];
$dopost = $_GET['do'];

因?yàn)橄旅嬉獙?duì)要插入到數(shù)據(jù)庫(kù)表中數(shù)據(jù)時(shí)還要進(jìn)行口令的判斷,所以,這里獲取do的值是必須的,但是,這里為什么一起要獲取欄目id的值呢?因?yàn)?,這里基本上要到最后一步才使用,為什么不等到使用時(shí)再獲取呢?如果密碼不對(duì)或其它原因的話,不能進(jìn)行插入操作,那不是白白獲取了$typeid的值,從代碼優(yōu)化的角度,這樣不是最優(yōu)的,但是,大家請(qǐng)注意,因?yàn)?,下面要?duì)獲取到的$GET的數(shù)組進(jìn)行操作,所以,為了保險(xiǎn)起見(jiàn),這時(shí)大這個(gè)地方先獲取到欄目id的值,這樣可以保證不會(huì)在后面出錯(cuò),當(dāng)然,如果您在開(kāi)發(fā)時(shí),能保證不會(huì)出錯(cuò)可以在使用$typeid時(shí)再獲取也可以。

然后,判斷口令是否正確,即if($dopost=="exdata")是否為真,若為真說(shuō)明我們?cè)跒g覽器地址欄輸入的口令就是正確的,否則,就是錯(cuò)誤的,如果出錯(cuò)出退出程序不做任何操作。

如果正確,則獲取n的值,文件excel的文件名$inputFileName。

然后,通過(guò)PHPExcel類獲取到excel文件里面的數(shù)據(jù)保存到數(shù)組$sheetData里面。

2)判斷要插入的數(shù)據(jù)是否已經(jīng)存在于表dede_addonshop里面。

查詢附加表dede_addonshop里面的字段bio2,bio1,并把查詢出來(lái)的一維數(shù)組放到二維數(shù)組$rowall里面。

因?yàn)?,把一條數(shù)據(jù)插入到織夢(mèng)系統(tǒng)里面后,其實(shí),是在織夢(mèng)的主表、附加表和微表進(jìn)入了插入操作,所以,在插入前都要先判斷一下插入的數(shù)據(jù)是不是在這三個(gè)表中都已經(jīng)存在了,如果已經(jīng)存在了就不要進(jìn)入插入操作了。

3)插入數(shù)據(jù)庫(kù)表時(shí)最大數(shù)據(jù)id的判斷

當(dāng)向主表或附加表或微表加插入數(shù)據(jù)庫(kù)前,還要判斷一下這時(shí)主表或附加表或微表里面最大的id,把這個(gè)id查詢出來(lái),進(jìn)入對(duì)比即:$id = max($aid,$arcid,$tinyid);

這樣對(duì)比以后獲取到的$id的值就是最大的,獲取這個(gè)最大的$id后,就可以在這個(gè)$id的基本上增加$id,例如,當(dāng)前表中最大的id為9,那么,下面我們?cè)诓迦霐?shù)據(jù)時(shí)對(duì)應(yīng)的id值就是從10開(kāi)始,這是非常重要的,如果不做這個(gè)判斷,那么,就會(huì)把原來(lái)的數(shù)據(jù)給覆蓋掉。

3)遍歷數(shù)組$sheetData插入數(shù)據(jù)

因?yàn)?,通過(guò)PHPExcel獲取到的數(shù)據(jù)是保存在$sheetData二維數(shù)據(jù)里面,類似array(array('a','b'),array('b','c')),所以,在遍歷這個(gè)數(shù)組,然后,把這個(gè)數(shù)組里面的數(shù)據(jù)插入到織夢(mèng)的主表、微表和附加表里面。

這里要注意$id = $id+1,這行代碼為什么要做這行代碼,是因?yàn)?,如果沒(méi)有這行代碼那么,在插入數(shù)據(jù)時(shí)id的值一直是同一個(gè),例如,$id=9,這樣一直是9,這是不可能的,因?yàn)?,一個(gè)網(wǎng)站面的每一篇文章的id都是不同的,如果全一樣的話,可能網(wǎng)站里面顯示數(shù)據(jù)就只有一條了,其它的全部被覆蓋掉了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

凭祥市| 米泉市| 哈尔滨市| 天柱县| 浦东新区| 阿巴嘎旗| 黄陵县| 慈利县| 正蓝旗| 凌云县| 东方市| 察雅县| 屯留县| 沙坪坝区| 九龙坡区| 兴仁县| 延安市| 无为县| 安达市| 桐庐县| 南充市| 萨嘎县| 甘泉县| 东台市| 沙河市| 大连市| 如东县| 广州市| 曲沃县| 海晏县| 平潭县| 乌兰县| 奉化市| 安阳县| 肇源县| 改则县| 阜城县| 岳阳县| 虞城县| 台江县| 江华|