新聞中心
導(dǎo)入excel文件,后端php處理導(dǎo)入的數(shù)據(jù)并存入數(shù)據(jù)庫(kù),需要前后端結(jié)合的demo!
thinkphp3.2和phpexcel導(dǎo)入最基本用法
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括阜新網(wǎng)站建設(shè)、阜新網(wǎng)站制作、阜新網(wǎng)頁(yè)制作以及阜新網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,阜新網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到阜新省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
先整個(gè)最基礎(chǔ)的代碼,理解了這個(gè),后面的就非常簡(jiǎn)單了
$file_name=?'./Upload/excel/123456.xls';
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.IOFactory");
$objReader?=?\PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel?=?$objReader-load($file_name,$encode='utf-8');
$sheet?=?$objPHPExcel-getSheet(0);
$highestRow?=?$sheet-getHighestRow();?//?取得總行數(shù)
$highestColumn?=?$sheet-getHighestColumn();?//?取得總列數(shù)
$s?=?$objPHPExcel-getActiveSheet()-getCell("A2")-getValue();
表格內(nèi)容:
再給大家整個(gè)一點(diǎn)難度的,先說(shuō)下思路。
1.上傳excel文件,得到它的地址
2.寫(xiě)個(gè)處理exl的function,即可
實(shí)例代碼演示:
public?function?upload(){
$files?=?$_FILES['exl'];
//?exl格式,否則重新上傳
if($files['type']?!='application/vnd.ms-excel'){
$this-error('不是Excel文件,請(qǐng)重新上傳');????
}
//?上傳
$upload?=?new?\Think\Upload();//?實(shí)例化上傳類(lèi)
$upload-maxSize???=?????3145728?;//?設(shè)置附件上傳大小
$upload-exts??????=?????array('xls');//?設(shè)置附件上傳類(lèi)型
$upload-rootPath??=?????'./Upload/';?//?設(shè)置附件上傳根目錄
$upload-savePath??=?????'excel/';?//?設(shè)置附件上傳(子)目錄
//$upload-subName???=?????array('date',?'Ym');
$upload-subName???=?????'';
//?上傳文件??
$info???=???$upload-upload();
$file_name?=??$upload-rootPath.$info['exl']['savepath'].$info['exl']['savename'];
$exl?=?$this-import_exl($file_name);
//?去掉第exl表格中第一行
unset($exl[0]);
//?清理空數(shù)組
foreach($exl?as?$k=$v){
if(empty($v)){
unset($exl[$k]);
}????
};
//?重新排序
sort($exl);
$count?=?count($exl);
//?檢測(cè)表格導(dǎo)入成功后,是否有數(shù)據(jù)生成
if($count1){
$this-error('未檢測(cè)到有效數(shù)據(jù)');????
}
//?開(kāi)始組合數(shù)據(jù)
foreach($exl?as?$k=$v){
$goods[$k]['goods_sn']?=?$v;
//?查詢(xún)數(shù)據(jù)庫(kù)
$where['goods_sn']?=?array('like','%'.$v.'%');
$res?=?M('goods')-where($where)-find();
$goods[$k]['goods_name']?=?$res['goods_name'];
$goods[$k]['goods_thumb']?=?$res['goods_thumb'];
if($res){
//?是否匹配成功??
$goods[$k]['is_match']????=?'1';
$f?+=?1;
}else{
//?匹配失敗
$goods[$k]['is_match']????=?'0';
$w?+=?1;
}
}
//?實(shí)例化數(shù)據(jù)
$this-assign('goods',$goods);
//print_r($f);
//?統(tǒng)計(jì)結(jié)果
$total['count']?=?$count;
$total['success']?=?$f;
$total['error']?=?$w;
$this-assign('total',$total);
//?刪除Excel文件
unlink($file_name);
$this-display('info');
}
/*?處理上傳exl數(shù)據(jù)
*?$file_name??文件路徑
*/
public?function?import_exl($file_name){
//$file_name=?'./Upload/excel/123456.xls';
import("Org.Util.PHPExcel");???//?這里不能漏掉
import("Org.Util.PHPExcel.IOFactory");
$objReader?=?\PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel?=?$objReader-load($file_name,$encode='utf-8');
$sheet?=?$objPHPExcel-getSheet(0);
$highestRow?=?$sheet-getHighestRow();?//?取得總行數(shù)
$highestColumn?=?$sheet-getHighestColumn();?//?取得總列數(shù)
for($i=1;$i$highestRow+1;$i++){
$data[]?=?$objPHPExcel-getActiveSheet()-getCell('A'.$i)-getValue();????
}
return?$data;????
}
有問(wèn)題一定要及時(shí)弄清楚
php數(shù)據(jù)庫(kù)的問(wèn)題,織夢(mèng)
建立數(shù)據(jù)庫(kù):
步驟:核心-頻道模式-內(nèi)容模型管理,添加一個(gè)內(nèi)容模塊(手動(dòng)添加你需要的數(shù)據(jù)字段)然后建立.demo.php文件(demo自己命名),寫(xiě)一個(gè)數(shù)據(jù)入庫(kù)操作(如果你的網(wǎng)站要處理大數(shù)據(jù)量的訪(fǎng)問(wèn)的話(huà),建議封裝函數(shù))。其中(數(shù)據(jù)主表:dede_archives
數(shù)據(jù)索引:dede_arctiny)和你添加的新表對(duì)應(yīng)字段才能進(jìn)行入庫(kù)操作,但織夢(mèng)的各個(gè)版本不同,字段也不同,需要樓主自己考慮,數(shù)據(jù)入庫(kù)之后,就好辦了。
添加
核心-網(wǎng)站欄目管理,添加你的需求欄目,這樣就可以在織夢(mèng)后臺(tái)讀取你的訂單了。
如果想前臺(tái)讀取的話(huà),我想這個(gè)就比較簡(jiǎn)單了,你自己可以解決的。
不懂的話(huà),請(qǐng)?jiān)僮穯?wèn)
關(guān)于ThinkPHP的M方法連接數(shù)據(jù)庫(kù)出錯(cuò)問(wèn)題:為什么查詢(xún)數(shù)據(jù)庫(kù)時(shí)只查詢(xún)數(shù)據(jù)表前綴demo_,沒(méi)有user,導(dǎo)致失敗
親,你本身數(shù)據(jù)庫(kù)中的表名叫 demo_user ,還是 demo_User ?
如果是demo_user, 換成 M('user'); 試試!~~
thikphp 單獨(dú)php文件怎樣操作數(shù)據(jù)庫(kù)
ThinkPHP內(nèi)置了抽象數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層,把不同的數(shù)據(jù)庫(kù)操作封裝起來(lái),我們只需要使用公共的Db類(lèi)進(jìn)行操作,而無(wú)需針對(duì)不同的數(shù)據(jù)庫(kù)寫(xiě)不同的代碼和底層實(shí)現(xiàn),Db類(lèi)會(huì)自動(dòng)調(diào)用相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)來(lái)處理。目前的數(shù)據(jù)庫(kù)包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括對(duì)PDO的支持,如果應(yīng)用需要使用數(shù)據(jù)庫(kù),必須配置數(shù)據(jù)庫(kù)連接信息,數(shù)據(jù)庫(kù)的配置文件有多種定義方式。
常用的配置方式是在項(xiàng)目配置文件中添加下面的參數(shù):
?php
//項(xiàng)目配置文件
return array(
//數(shù)據(jù)庫(kù)配置信息
'DB_TYPE' = 'mysql', // 數(shù)據(jù)庫(kù)類(lèi)型
'DB_HOST' = 'localhost', // 服務(wù)器地址
'DB_NAME' = 'thinkphp', // 數(shù)據(jù)庫(kù)名
'DB_USER' = 'root', // 用戶(hù)名
'DB_PWD' = '', // 密碼
'DB_PORT' = 3306, // 端口
'DB_PREFIX' = 'think_', // 數(shù)據(jù)庫(kù)表前綴
//其他項(xiàng)目配置參數(shù)
// ...
);
或者采用如下配置
'DB_DSN' = 'mysql://username:password@localhost:3306/DbName'
使用DB_DSN方式定義可以簡(jiǎn)化配置參數(shù),DSN參數(shù)格式為:
數(shù)據(jù)庫(kù)類(lèi)型://用戶(hù)名:密碼@數(shù)據(jù)庫(kù)地址:數(shù)據(jù)庫(kù)端口/數(shù)據(jù)庫(kù)名
如果兩種配置參數(shù)同時(shí)存在的話(huà),DB_DSN配置參數(shù)優(yōu)先。
注意:如果要設(shè)置分布式數(shù)據(jù)庫(kù),暫時(shí)不支持DB_DSN方式配置。1
如果采用PDO驅(qū)動(dòng)的話(huà),則必須首先配置DB_TYPE 為pdo,然后還需要單獨(dú)配置其他參數(shù),例如:
//PDO連接方式
'DB_TYPE' = 'pdo', // 數(shù)據(jù)庫(kù)類(lèi)型
'DB_USER' = 'root', // 用戶(hù)名
'DB_PWD' = '', // 密碼
'DB_PREFIX' = 'think_', // 數(shù)據(jù)庫(kù)表前綴
'DB_DSN' = 'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'
注意:PDO方式的DB_DSN配置格式有所區(qū)別,根據(jù)不同的數(shù)據(jù)庫(kù)類(lèi)型設(shè)置有所不同。
配置文件定義的數(shù)據(jù)庫(kù)連接信息一般是系統(tǒng)默認(rèn)采用的,因?yàn)橐话阋粋€(gè)項(xiàng)目的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)配置是相同的。該方法系統(tǒng)在連接數(shù)據(jù)庫(kù)的時(shí)候會(huì)自動(dòng)獲取,無(wú)需手動(dòng)連接。
可以對(duì)每個(gè)項(xiàng)目和不同的分組定義不同的數(shù)據(jù)庫(kù)連接信息,如果開(kāi)啟了調(diào)試模式的話(huà),還可以在不同的應(yīng)用狀態(tài)的配置文件里面定義獨(dú)立的數(shù)據(jù)庫(kù)配置信息。1
第二種 在模型類(lèi)里面定義connection屬性
如果在某個(gè)模型類(lèi)里面定義了connection屬性的話(huà),則實(shí)例化該自定義模型的時(shí)候會(huì)采用定義的數(shù)據(jù)庫(kù)連接信息,而不是配置文件中設(shè)置的默認(rèn)連接信息,通常用于某些數(shù)據(jù)表位于當(dāng)前數(shù)據(jù)庫(kù)連接之外的其它數(shù)據(jù)庫(kù),例如:
//在模型里單獨(dú)設(shè)置數(shù)據(jù)庫(kù)連接信息
protected $connection = array(
'db_type' = 'mysql',
'db_user' = 'root',
'db_pwd' = '1234',
'db_host' = 'localhost',
'db_port' = '3306',
'db_name' = 'thinkphp'
);
也可以采用DSN方式定義,例如:
//或者使用DSN定義
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp';
如果我們已經(jīng)在配置文件中配置了額外的數(shù)據(jù)庫(kù)連接信息,例如:
//數(shù)據(jù)庫(kù)配置1
'DB_CONFIG1' = array(
'db_type' = 'mysql',
'db_user' = 'root',
'db_pwd' = '1234',
'db_host' = 'localhost',
'db_port' = '3306',
'db_name' = 'thinkphp'
),
//數(shù)據(jù)庫(kù)配置2
'DB_CONFIG2' = 'mysql://root:1234@localhost:3306/thinkphp';
那么,我們可以把模型類(lèi)的屬性定義改為:
//調(diào)用配置文件中的數(shù)據(jù)庫(kù)配置1
protected $connection = 'DB_CONFIG1';
//調(diào)用配置文件中的數(shù)據(jù)庫(kù)配置2
protected $connection = 'DB_CONFIG2';
如果采用的是M方法實(shí)例化模型的話(huà),也可以支持傳入不同的數(shù)據(jù)庫(kù)連接信息,例如:
$User = M('User','other_','mysql://root:1234@localhost/demo');
表示實(shí)例化User模型,連接的是demo數(shù)據(jù)庫(kù)的other_user表,采用的連接信息是第三個(gè)參數(shù)配置的。如果我們?cè)陧?xiàng)目配置文件中已經(jīng)配置了DB_CONFIG2的話(huà),也可以采用:
$User = M('User','other_','DB_CONFIG2');
如果你的個(gè)別數(shù)據(jù)表沒(méi)有定義任何前綴的話(huà),可以在前綴參數(shù)中傳入NULL,例如:
$User = M('User',Null,'DB_CONFIG2');
表示實(shí)例化User模型,連接的是demo數(shù)據(jù)庫(kù)的user表。
需要注意的是,ThinkPHP的數(shù)據(jù)庫(kù)連接的惰性的,所以并不是在實(shí)例化的時(shí)候就連接數(shù)據(jù)庫(kù),而是在有實(shí)際的數(shù)據(jù)操作的時(shí)候才會(huì)去連接數(shù)據(jù)庫(kù)(額外的情況是,在系統(tǒng)第一次實(shí)例化模型的時(shí)候,會(huì)自動(dòng)連接數(shù)據(jù)庫(kù)獲取相關(guān)模型類(lèi)對(duì)應(yīng)的數(shù)據(jù)表的字段信息)。
本文名稱(chēng):php數(shù)據(jù)庫(kù)demo php數(shù)據(jù)庫(kù)的創(chuàng)建
當(dāng)前地址:http://fisionsoft.com.cn/article/dospidi.html