Ecshop本身源碼寫得就有問題。打開order_status.php文件,翻到最下方,看function get_orderinfo($start_date, $end_date)的定義,其中所有的sql都用了下面的代碼:
function get_orderinfo($start_date, $end_date)
{
$order_info = array();
/* 未確認(rèn)訂單數(shù) */
$sql = 'SELECT COUNT(*) AS unconfirmed_num FROM ' .$GLOBALS['ecs']->table('order_info').
" WHERE order_status = '" .OS_UNCONFIRMED. "' AND add_time >= '$start_date'".
" AND add_time < '" . ($end_date + 86400) . "'";
很顯然,這里有個(gè)很明顯的邏輯錯(cuò)誤,即$end_date+86400,除非這里用戶選擇的開始時(shí)間和結(jié)束時(shí)間是同一天,否則沒有必要加上86400(86400秒等于1天),這個(gè)錯(cuò)誤結(jié)果會(huì)導(dǎo)致最后的訂單統(tǒng)計(jì)數(shù)量已經(jīng)不是在指定時(shí)間段內(nèi)的數(shù)據(jù),而是指定的時(shí)間后再加上一天。
將無用的已確認(rèn)訂單統(tǒng)計(jì)代碼改成已支付的統(tǒng)計(jì)代碼:
/* 已確認(rèn)訂單數(shù) */
$sql = 'SELECT COUNT(*) AS confirmed_num FROM ' .$GLOBALS['ecs']->table('order_info').
" WHERE order_status = '" .OS_CONFIRMED. "' AND shipping_status NOT ". db_create_in(array(SS_SHIPPED, SS_RECEIVED)) . " AND pay_status NOT" . db_create_in(array(PS_PAYED, PS_PAYING)) ." AND add_time >= '$start_date'".
" AND add_time < '" . ($end_date + 86400) . "'";
$order_info['confirmed_num'] = $GLOBALS['db']->getOne($sql);
改成:
/* by zuimoban.com 已支付訂單數(shù) */
$sql = 'SELECT COUNT(*) AS confirmed_num FROM ' .$GLOBALS['ecs']->table('order_info').
" WHERE pay_status =" . PS_PAYED ." AND shipping_status NOT" . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) ." AND add_time >= '$start_date'".
" AND add_time < $end_date";
$order_info['confirmed_num'] = $GLOBALS['db']->getOne($sql);
以上就是本文章的內(nèi)容,希望對(duì)大家有所幫助
新聞熱點(diǎn)
疑難解答
圖片精選