四时宝库

程序员的知识宝库

一个文件扒掉网站库子?不用插件批量导出opencart订单excel教程

前面说过在这家跨境电商公司用opencart做外贸独立商城,好处当然是后台非常简洁如图1,速度对我们这种中小型外贸电商公司而言买不起高档配置的条件下的理性选择,但是后台太简洁了以至于很多实用功能都没有,我现在就碰到了个问题,公司现在业务还可以用上了专门的外贸电商erp系统,很多数据来源是导入导出的excel表格,老板要求我们外贸自建站商城的订单资料也要导出成excel表格,方便他们再导入外贸电商erp系统再做后续处理如发货之类的。

当然网上包括官网上opencart导出批量订单excel的插件很多,包括我们自己的自建站商城系统也买了付费版的opencart导入导出插件“ExcelPort 3.0.1”如图2所示

从中可以看出来可以导入导出的项目非常多几乎所有的数据项都可以导出来,但是不要说这个插件很贵了(需要的可以在我的网站下载)导出的表格格式还很丑陋,尤其是导出的excel选择项不够自定义灵活。

做完有FTP权限的自己的网站和完整的数据库权限的所有者,如果不要插件直接将相关订单数据表结合客户管理表导出excel表格再自动做些美化处理,不是就可以不用插件就实现了批量导出opencart订单excel功能,而且可以随心所欲自定义要导出的数据项。我把这个思路教程写下来,分享给大家,请网友指点。

第一步当然是链接数据库,代码如下:

//脚本配置(webcart.top)

define ("DB_HOST", "localhost"); //DB host address

define ("DB_USER", "webcart"); //DB user name

define ("DB_PASS","webcart.top"); //DB password

define ("DB_NAME","webcart"); //DB database name

define ("PASSWORD", "Passwd12"); //文档存取密码(将用于使用数据的授权访问数据)。请使用不同的密码。

define ("PREFIX", ""); //表名前缀(如果有)…

define ("FILENAME", "order_data"); //Export default filename

第二部就是超级好玩的从OpenCart数据库中提取数据,这里也就是上面说的可以随心所欲自定义自己要导出的excel表格项的地方,代码如下可以根据自己要导出的数据项设置。

//SQL查询,如果需要更多(或更少)字段,请自定义(webcart.top)

define ("SQL","

SELECT

`".PREFIX."order`.order_id,

`".PREFIX."order`.invoice_no,

`".PREFIX."order`.store_name,

`".PREFIX."order`.customer_id,

`".PREFIX."order`.customer_group_id,

firstname,

lastname,

email,

telephone,

`".PREFIX."order`.date_added,

`".PREFIX."order`.date_modified,

`".PREFIX."order`.total AS order_total,

currency_code,

".PREFIX."order_status.name AS status,

".PREFIX."order_product.product_id AS product_item,

".PREFIX."order_product.name AS product_name,

".PREFIX."order_product.model AS product_model,

".PREFIX."order_product.quantity AS product_quantity,

".PREFIX."order_option.order_product_id AS option_product,

".PREFIX."order_option.product_option_id AS option_id,

".PREFIX."order_option.name AS option_name,

".PREFIX."order_option.value AS option_value,

".PREFIX."order_product.total AS product_total,

".PREFIX."order_product.tax,

custom_field,

payment_method,

payment_code,

payment_firstname,

payment_lastname,

payment_company,

payment_address_1,

payment_address_2,

payment_city,

payment_zone,

payment_postcode,

payment_country,

payment_custom_field,

shipping_method,

shipping_code,

shipping_firstname,

shipping_lastname,

shipping_company,

shipping_address_1,

shipping_address_2,

shipping_city,

shipping_zone,

shipping_postcode,

shipping_country,

shipping_custom_field,

comment

FROM `".PREFIX."order`

LEFT JOIN ".PREFIX."order_product ON `".PREFIX."order`.order_id = `".PREFIX."order_product`.order_id

WHERE `".PREFIX."order_status`.order_status_id > 0

ORDER BY

`".PREFIX."order`.order_id,

".PREFIX."order_product.product_id,

".PREFIX."order_option.product_option_id ASC

");

第3步事实上上面2步就已经实现了把数据表批量导出opencart订单excel的功能,但是由于这个文件功能如此强大并且不依赖于任何OpenCart目录文件。无需VQMod,OCMod,主题或权限!以至于只要有人知道这个文件的路径都可以把掉整个网站的数据库“裤子”,因此有必要跟访问的超级强大的文件访问权限的控制,防止坏人干坏事,代码如下:

if($_GET["pw"]==PASSWORD){

//Connect to the database and fetch the data

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die("DB: Couldn't make connection. Please check the database configurations.");

$setSql = SQL;

$setRec = mysqli_query($link, $setSql);

//Fetch the column names

$columns = mysqli_fetch_fields($setRec);

foreach($columns as $column){

$setMainHeader .= $column->name."\t";

}

while($rec = mysqli_fetch_row($setRec)) {

$rowLine = '';

foreach($rec as $value) {

if(!isset($value) || $value == "") {

$value = "\t";

} else {

//Escape all the special characters

$value = strip_tags(str_replace('"', '""', $value));

$value = '"'.$value . '"' . "\t";

}

$rowLine .= $value;

}

$setData .= trim($rowLine)."\n";

}

$setData = str_replace("\r", "", $setData);

if ($setData == "") {

$setData = "\nNo matching records found\n";

}

//Download headers

header("Content-type: application/octet-stream");

header("Content-Disposition: attachment; filename=".FILENAME."-".date("Y_m_d-Hi_s").".xls");

header("Pragma: no-cache");

header("Expires: 0");

//Print the table rows as an Excel row with the column name as a header

echo ucwords($setMainHeader)."\n".$setData."\n";

}

//Message to display in case of wrong access password

else {

$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);

echo "Invalid password! Remember to write the URL properly and include your password:<BR>".(isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]".$uri_parts[0]."?pw=your_password";

}最终实现类似网址:https://www.webcart.top/yourfolder/admin/webcart_order_export.php?pw = YOURPASSWORD来保护这个超强功能文件,别人把掉整个网站的库子。

最后欣赏一下最终导出的opencart订单excel表格效果图3所示,是不是超级多的数据?

当然对黑客高手来说我这个把掉网站库子的方法是要笑掉大牙的,这个前提条件是有了数据库控制权限,什么数据导不出来呀,但对我们老板要求的批量导出opencart订单excel的功能总算不用插件就实现的简单方法,简单、高效、漂亮还不要钱。需要的网友可以下载本教程完整的程序,其实也就一个程序文件。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接