制作網(wǎng)站時(shí),經(jīng)常會遇到檢索數(shù)據(jù)列表的情況。通常用戶希望下載這些列表數(shù)據(jù)并存儲到客戶端。當(dāng)然下載這些數(shù)據(jù)的時(shí)候是需要固定的格式,以便于用Excel等軟件閱覽。說的簡單一些就是CSV/Excel數(shù)據(jù)導(dǎo)出 。
注意事項(xiàng):
輸出文檔的基本格式為:列1,列2,列3,……,列nn
格式化數(shù)據(jù)的同時(shí)要對特殊的字符進(jìn)行過濾。譬如“,”如果不轉(zhuǎn)換為全角“,”會導(dǎo)致數(shù)據(jù)格式的混亂。
實(shí)現(xiàn)方法:
舉例:檢索數(shù)據(jù)庫表,將結(jié)果保存為字符串,進(jìn)行格式和特殊字符的過濾后,導(dǎo)出到客戶端的CSV文件。
OrderSearchEdit_saveCSV.php
<?php
include($_SERVER[’DOCUMENT_ROOT’] . “/ftcart/OrderInfoManager.class.php”);
include($_SERVER[’DOCUMENT_ROOT’] . “/ftcart/CommonUtil.php”);
include($_SERVER[’DOCUMENT_ROOT’] . “/ftcart/CommonConst.php”);
include($_SERVER[’DOCUMENT_ROOT’] . “/ftcart/CommonErrorMsg.php”);
include($_SERVER[’DOCUMENT_ROOT’] . “/webadmin.php”);
$searchcase = new OrderInfoManager();
$nowTime = microtime_float();
$searchcase = unserialize($_SESSION[“ORDER_SEARCH_CASE”]);
$listcsv = $searchcase->doCSV();// 調(diào)用doCSV()方法
$filename = $nowTime;
//$filename = str_replace(“:”,””,$nowTime);
//$filename = trim($filename);
//echo $filename;
header(“Content-Disposition: attachment; filename=”.$filename.”.csv”);
header(’Content-Type:APPLICATION/OCTET-STREAM’);
echo “注文No.,注文日,氏名,住所,支払い方法,合計(jì)金額,発送 “;
echo $listcsv;
?>
doCSV()方法:
function doCSV(){
global $db;
$nowdate = getNowDateYYYYMMDD();
$SQL = “#####”;
$rs=$db->query($SQL);
$result;
$payment_method;
$delivery_status;
if ((! DB::isError($rs))) {
while ($row = $rs->fetchRow()){
$row = Common_record($row);
if($row[’payment_method_id’]==0){$payment_method=”銀行振り込み”;}
else if($row[’payment_method_id’]==1){$payment_method=”郵便局”;}
else if($row[’payment_method_id’]==2){$payment_method=”代引き”;}
else{$payment_method=””;}
if($row[’actual_send_date’]>$nowdate){$delivery_status=”未発送”;}
else if($row[’actual_send_date’]<$nowdate){$delivery_status=”発送済”;}
//格式化并過濾特殊字符
$result .= $row[’order_id’].”,”.
$row[’create_date’].”,”.
$row[’order_first_name’].” “.
$row[’order_last_name’].”,”.
str_replace(“,”,”,”,$row[’order_address’]).”,”.
$payment_method.”,”.
$row[’amount’].”,”.
$delivery_status.” “;
}
return $result;
}
}
這樣就ok啦,在你的導(dǎo)出數(shù)據(jù)html頁面做一個(gè)<input type=”button” onclick=”do_CSV()”>然后在JS里面寫一個(gè)提交form的do_CSV(),并將form action到OrderSearchEdit_saveCSV.php就完成了。應(yīng)該注意的是由于OrderSearchEdit_saveCSV.php中聲明的是一個(gè)Content-Type:APPLICATION/OCTET-STREAM所以當(dāng)前頁面不會被刷新。這點(diǎn)可能大家都知道,不過我是剛學(xué)到的,所以記錄一下。