文件导出dbf功能实现
功能要求
网站后台需增加一个导出功能,导出文件格式及说明见附件。(需要导出的字段在现有数据库中全部包含,不需要新增内容)
要求:
1、包含第二天要送货的订单内容,可以选择送货日期再导出
2、一天可以多次导出,已经导出过的订单,不需要重复导出
3、导出文件需要上传到指定的FTP目录
附件Need.dbf(导出格式) 、
PROTCODE |
DEPTCODE |
DEPTNAME |
GOODSCODE |
GOODSNAME |
CLASSIFY |
CLANAME |
CLASSI |
CLASSINAME |
RES |
WAREFNO |
MARK |
AAAAAAAAAAAA |
901 |
罗湖中转站A9 |
5508001 |
6寸抹茶蜜豆 |
55 |
网络蛋糕类 |
5508 |
网络蛋糕类 |
1 |
0 |
REALFRAME |
BUYQUAN |
BUYDAY |
NEEDQUAN |
NEEDTOTAL |
NEEDBOX |
REALQUAN |
REALTOTAL |
REALBOX |
||||||||
0.0000 |
0.0000 |
0.0000 |
4.0000 |
0.0000 |
0.0000 |
0.0000 |
0.0000 |
901 |
||||||||
TYPE |
DDATE1 |
DDATE2 |
OPERATE |
BILLNO |
JUDGE |
RELA_SHIP |
WORKDATE |
|||||||||
0.0000 |
2011-6-2 |
2011-6-3 |
就爱族 |
001A01106020 |
0 |
20110602 |
20110602 |
导出文件字段及格式.xls(数据字段说明)
AAAAAAAAAAAA |
901 |
罗湖中转站A9 |
5508001 |
6寸抹茶蜜豆 |
55 |
网络蛋糕类 |
5508 |
网络蛋糕类 |
1 |
字段名 |
字段内容示例 |
字段格式 |
字段说明 |
PROTCODE |
AAAAAAAAAAAA |
文本 |
固定(12个大写A) |
DEPTCODE |
901 |
文本 |
中转站编号(901、902、903) |
DEPTNAME |
罗湖中转站A901 |
文本 |
中转站名称+编号 |
GOODSCODE |
5508001 |
文本 |
产品编号 |
GOODSNAME |
6寸抹茶蜜豆蛋糕 |
文本 |
产品名称 |
CLASSIFY |
55 |
文本 |
大类(产品编号前两位) |
CLANAME |
网络蛋糕类 |
文本 |
固定 |
CLASSI |
5508 |
文本 |
小类(产品编号前4位) |
CLASSINAME |
网络蛋糕类 |
文本 |
固定 |
RES |
1 |
文本 |
固定 |
WAREFNO |
文本 |
空 |
|
MARK |
0 |
文本 |
固定 |
REALFRAME |
0.0000 |
数字 |
固定 |
BUYQUAN |
0.0000 |
数字 |
固定 |
BUYDAY |
0.0000 |
数字 |
固定 |
NEEDQUAN |
4.0000 |
数字 |
产品数量 |
NEEDTOTAL |
0.0000 |
数字 |
固定 |
NEEDBOX |
0.0000 |
数字 |
固定 |
REALQUAN |
0.0000 |
数字 |
固定 |
REALTOTAL |
0.0000 |
数字 |
固定 |
REALBOX |
901 |
文本 |
中转店编号 |
TYPE |
0.0000 |
数字 |
固定 |
DDATE1 |
2011-6-2 |
日期 |
订单日期 |
DDATE2 |
2011-6-3 |
日期 |
送货日期 |
OPERATE |
就爱族 |
文本 |
固定 |
BILLNO |
001A01106020001 |
文本 |
订单编号 |
JUDGE |
0 |
数字 |
固定 |
RELA_SHIP |
20110602 |
文本 |
订单日期 |
WORKDATE |
20110602 |
文本 |
导出日期 |
实现过程
后台添加一文件导出菜单
dbf文件可以使用dbfview软件打开
php.ini中需要启用
extension=php_dbase.dll
注意:dbf文件编码要设置成GB2312 否则乱码
程序实现
后台文件修改:
添加文件\almc\export.php文件 编码需要设置为GB2312
<?php
//导出.dbf文件
header(“Content-Type: text/html; charset=GB2312”);
// database “definition “
$def = array(
array(“PROTCODE”, “C”, 12), //固定(12个大写A)
array(“DEPTCODE”, “C”, 3), //中转站编号(901、902、903)
array(“DEPTNAME”, “C”, 255), //中转站名称+编号
array(“GOODSCODE”, “C”, 7), //产品编号
array(“GOODSNAME”, “C”, 255), //产品名称
array(“CLASSIFY”, “C”, 2), //大类(产品编号前两位)
array(“CLANAME”, “C”, 255), //固定
array(“CLASSI”, “C”, 4), //小类(产品编号前4位)
array(“CLASSINAME”, “C”, 255), //固定
array(“RES”, “C”, 1), //固定
array(“WAREFNO”, “C”, 255), //空
array(“MARK”, “C”, 255), //固定
array(“REALFRAME”, “N”, 20, 4), //固定
array(“BUYQUAN”, “N”, 20, 4), //固定
array(“BUYDAY”, “N”, 20, 4), //固定
array(“NEEDQUAN”, “N”, 20, 4), //产品数量
array(“NEEDTOTAL”, “N”, 20, 4), //固定
array(“NEEDBOX”, “N”, 20, 4), //固定
array(“REALQUAN”, “N”, 20, 4), //固定
array(“REALTOTAL”, “N”, 20, 4), //固定
array(“REALBOX”, “C”, 255), //中转店编号
array(“TYPE”, “N”, 20, 4), //固定
array(“DDATE1”, “D”), //订单日期
array(“DDATE2”, “D”), //送货日期
array(“OPERATE”, “C”, 255), //固定
array(“BILLNO”, “C”, 255), //订单编号
array(“JUDGE”, “N”, 20, 4), //固定
array(“RELA_SHIP”, “C”, 255), //订单日期
array(“WORKDATE”, “C”, 255), //导出日期
);
// creation
if (!dbase_create(\’dbf/test.dbf \’, $def)) {
echo “Error, can \’t create the database\n “;
}
// open in read-write mode
$db = dbase_open(\’dbf/test.dbf\’, 2);
if ($db) {
dbase_add_record($db, array(
\’AAAAAAAAAAAA\’, \’901\’, \’罗湖中转站A9\’, \’5508001\’, \’6寸抹茶蜜豆\’,
\’55\’, \’网络蛋糕类\’, \’5508\’, \’网络蛋糕类\’, \’1\’,
\’\’, \’0\’, \’0.0000\’, \’0.0000\’, \’0.0000\’,
\’4.0000\’, \’0.0000\’, \’0.0000\’, \’0.0000\’, \’0.0000\’,
\’901\’, \’0.0000\’, \’2011-6-2\’, \’2011-6-3\’, \’就爱族\’,
\’001A01106020\’, \’0\’, \’20110602\’, \’20110602\’
));
dbase_add_record($db, array(
\’AAAAAAAAAAAA\’, \’901\’, \’罗湖中转站A9\’, \’5508001\’, \’6寸抹茶蜜豆\’,
\’55\’, \’网络蛋糕类\’, \’5508\’, \’网络蛋糕类\’, \’1\’,
\’\’, \’0\’, \’0.0000\’, \’0.0000\’, \’0.0000\’,
\’4.0000\’, \’0.0000\’, \’0.0000\’, \’0.0000\’, \’0.0000\’,
\’901\’, \’0.0000\’, \’2011-6-2\’, \’2011-6-3\’, \’就爱族\’,
\’001A01106020\’, \’0\’, \’20110602\’, \’20110602\’
));
}
//var_dump(dbase_get_record($db, 1));
dbase_close($db);
?>