定型管 電子鈑金
返回列表 回復 發帖

帖子標題:[分享] ECSHOP商品库存会突变为65535的异常BUG要如何解决

下面就具體說一說怎麽來防止這種錯誤的發生。
1)第一步,主要是對 includes/lib_order.php 文件進行一下二次開發。
先找到下面這段代碼

$number = ($number > 0) ? '+ ' . $number : $number;

/* 處理貨品庫存 */

    $products_query = true;
    if (!empty($product_id))
    {
        $sql = "UPDATE " . $GLOBALS['ecs']->table('products') ."
                SET product_number = product_number $number
                WHERE goods_id = '$good_id'
                AND product_id = '$product_id'
                LIMIT 1";
        $products_query = $GLOBALS['db']->query($sql);
    }
     /* 處理商品庫存
ecshop模板 */
    $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') ."
            SET goods_number = goods_number $number
            WHERE goods_id = '$good_id'
            LIMIT 1";
    $query = $GLOBALS['db']->query($sql);
將其修改為
if($number>=0)
{
  /* 處理貨品庫存 */
  $products_query = true;
  if (!empty($product_id))
  {
   $sql = "UPDATE " . $GLOBALS['ecs']->table('products') .
     " SET product_number = product_number + $number  ".
     " WHERE goods_id = '$good_id'  AND product_id = '$product_id' LIMIT 1";
   $products_query = $GLOBALS['db']->query($sql);
  }
/* 處理商品庫存 */
  $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') .
    " SET goods_number = goods_number + $number ".   
    " WHERE goods_id = '$good_id' LIMIT 1";
  $query = $GLOBALS['db']->query($sql);
}
else
{
   /* 處理貨品庫存 */
  $products_query = true;
  $abs_number = abs($number);
  if (!empty($product_id))
  {
   $sql = "UPDATE " . $GLOBALS['ecs']->table('products') . " SET product_number =".
     " if( product_number >= $abs_number,product_number - $abs_number,0)  ".
     " WHERE goods_id = '$good_id' AND product_id = '$product_id' LIMIT 1";
   $products_query = $GLOBALS['db']->query($sql);
  }
  /* 處理商品庫存 */
  $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . " SET goods_number = ".
      " if( goods_number >= $abs_number , goods_number - $abs_number ,0) ".   
    " WHERE goods_id = '$good_id' LIMIT 1";
  $query = $GLOBALS['db']->query($sql);   
}

2)、接下來還需要修改後臺文件  /admin/order.php,

找到下面代碼,大概在811行左右。

if (!empty($value['product_id']))
{
        $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "
                       SET product_number = product_number - " . $value['sums'] . "
                        WHERE product_id = " . $value['product_id'];
       $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
}
$minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "
                SET goods_number = goods_number - " . $value['sums'] . "
                WHERE goods_id = " . $value['goods_id'];
$GLOBALS['db']->query($minus_stock_sql, 'SILENT');
將之修改為
if (!empty($value['product_id']))
{
       $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "
       SET product_number = if( product_number > $value[sums], product_number -$value[sums],0 )  
       WHERE product_id = " . $value['product_id'];
     $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
}
$minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "
     SET goods_number = if (  goods_number > $value[sums], goods_number -$value[sums],0 )
     WHERE goods_id = " . $value['goods_id'];
  $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
這樣就网站模板OK了。
提醒您: 您在"ECSHOP 交流討論區"交流請遵守台灣法律規範,"最模板" 發表的文章《ECSHOP商品库存会突变为65535的异常BUG要如何解决》版權歸屬作者所有,如是轉貼版權歸屬原作者所有.本論壇不對其真實性做任何考證.
返回列表