使用PHP導出數據庫內容到Excel表格
首先根據需求要分爲用戶信息,商家信息,團單信息,優惠券信息,訂單信息導出,我是用的下拉列表通過onchange事件執行ajax請求到控制器處理,之後輸出到視圖層,如下:
<select id="downtype" name="downtype" onchange="ajaxchangetype()">
<option value="0">--請選擇--</option>
<?php if(isset($type)){foreach($type as $k => $v){?> <!--下載的分類是從配置文件加載進來的-->
<option value="<?php echo $k?>"><?php echo $v?></option>
<?php }}?>
</select>
<script type="text/javascript">
function ajaxchangetype()
{
var type = $("#downtype").val();
$.ajax({
url:'',
type:'post',
async:true,
data:{
type:type,
},
dataType:'text',
success:function(data){
if(isNaN(data))
{
$("#citylist").html(data);
$("#down").html("<input type='submit' class='formbutton' value='下載'>");
}else
{
window.location.reload();
}
},
})
}
</script>
控制器部分
//獲取所有城市和地區
$allcities = Category::getCategoryList('city');
foreach($allcities as $k=> $v)
{
$allcities[$k]['child'] = Category::getCategoryList('area', $v['id']);
}
$list = [];
//把用來顯示城市聯動的html都存進$list中
foreach($allcities as $k => $v)
{
$list[] = "<option value='".$v['id']."'>".$v['name']."</option>";
foreach($v['child'] as $v2){
$list[] = "<option value='".$v2['id']."'>|---".$v2['name']."</option>";
}
}
//前臺通過onchange事件傳不同的參數進這個方法,對每個參數進行處理後通過ajax顯示到視圖
$datalist = "用戶ID:<input type='number' name='#'/><br><br>城市列表:<select id='#' name='#'><option value='0'>全部地區</option>".implode($list)."</select>";
exit($datalist);
//通過switch case 對不同的參數處理,就不一一列舉了
表單提交後的控制器
case "partner":
//商家信息下載
if(!empty($_POST['partnername'])){$where['你的數據庫字段名'] = $_POST['partnername'];}
if(!empty($_POST['cityid'])){$where['你的數據庫字段名'] = $_POST['cityid'];}
//根據表單提交的值到相應的model查詢,返回數據
if(empty($where))
{
$partnerlist = Partner::getPartnersDownload();//進入你的模型取出需要的數據
}else
{
$partnerlist = Partner::getPartnersDownload($where);
}
if(empty($partnerlist))
{
exit("未找到商家信息");
}
//配置excel的列表頭如
$kn = array('id' => '商家ID','name' => '商家名稱')等;
//導出文件的文件名,我習慣是一個字符串_時間的格式
$name = "你喜歡就好_".date('Ymd');
down_excel($partnerlist, $kn, $name);//執行導出函數
break;
最後執行導出的函數
/**
* 數據導出到Excel
* @param [arr] $data 導出數據
* @param [arr] $keynames 列表頭
* @param [string] $name 文件名
* @param [string] $index 控制excel起始ID
*/
function down_excel($data, $keynames, $name,$index=0){
$xls[] = "<html><meta http-equiv=content-type content=\"text/html; charset=UTF-8\"><body><table border='1'>";
$xls[] = "<tr><th>ID</th><th>" . implode("</th><th>", array_values($keynames)) . '</th></tr>'; //輸出excel列表頭
foreach($data As $o){
$line = array(++$index);
foreach($keynames AS $k=>$v){
$line[] = $o[$k];
}
$xls[] = '<tr><td>'. implode("</td><td>", $line) . '</td></tr>'; //通過循環輸出內容
}
$xls[] = '</table></body></html>';
$xls = join("\r\n", $xls);
header('Content-Disposition: attachment; filename="'.$name.'.xls"'); //生成文件
die(mb_convert_encoding($xls,'UTF-8','UTF-8')); //字符編碼轉換
}