ECSHOP商品库存会突变为65535的异常BUG要如何解决-站长杂谈下载

ECSHOP商品库存会突变为65535的异常BUG要如何解决

开通本站Svip会员,全站资源免费下
只要看完题目你就应该明白本次要讲的是什么问题了吧?
) q# Q2 G! t5 W! g需要补充的一点就是,这里说的商品库存,
) Q" r( p+ ^: W, ~( T既包括商品总库存(goods表里的goods_number字段),
1 x, g7 ?% b, H也包括货品库存,即不同属性对应的库存(products表里的product_number字段)。% v7 m8 e9 a# v8 @2 K6 A1 z7 Q1 T

) L  n  k; P" W至于为什么会突变为65535,而不是15565,也不是255255,& A+ d- J3 t3 W, N. N9 p/ P
那是因为这两个地段的类型都是无符号的 smallint(5),5 J. o: g3 {4 G$ ^! p' I
取值范围为 0---65535,所以某个节点某个原因才会突变为 65535。. \! |, D% M* |2 C9 g

9 v2 M9 g5 ]- n4 [4 n1 u下面就具体说一说怎么来防止这种错误的发生。
: Y5 M8 D! G8 }+ S5 U
" R8 m: S6 T2 ^1)6 N! c. w  W; `4 [& n
第一步,主要是对 includes/lib_order.php 文件进行一下二次开发。4 |- j! `: I+ P* b, ^: S
先找到下面这段代码8 N$ r9 V8 a+ R# C, e  b

7 y; ~1 Y# q+ u+ b  G$number = ($number > 0) ? '+ ' . $number : $number;: V; l6 @  J5 }2 R

) J# y. X% p% m8 F1 E! t  t3 g    /* 处理货品库存 */" D9 G1 p$ ~! q) e5 z( {
    $products_query = true;  T2 p' [3 h# {, \( I: n# S
    if (!empty($product_id))1 o' n! k) K+ f! ^6 N' b6 n/ R
    {3 D  I9 k% E2 x& S1 E
        $sql = "UPDATE " . $GLOBALS['ecs']->table('products') ."8 l; v$ [2 u3 a% h$ Z0 v
                SET product_number = product_number $number
# {7 L7 N; s6 ^: z9 o1 N7 Y# ?) B                WHERE goods_id = '$good_id'+ E: k) q( ]' Y+ f, e% T% B; E
                AND product_id = '$product_id'
( s. d' \. c% ]5 |                LIMIT 1";
8 @/ S! L; i& @; i        $products_query = $GLOBALS['db']->query($sql);
4 u$ X: m: L  A" F  U" J    }- l3 }4 k& x) ?- W1 b4 Z) ~5 \
3 [3 H9 M$ _* Q& ]2 K  {8 X. [
    /* 处理商品库存 */( r$ F4 R! F. t9 Q. E3 T& d
    $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') ."7 h8 [5 y0 i, P+ L& B, A
            SET goods_number = goods_number $number8 u, v1 ^- j, ~
            WHERE goods_id = '$good_id'
7 w* A" R. [! N. x9 A+ M            LIMIT 1";6 c) ?8 T8 D  @5 \7 r
    $query = $GLOBALS['db']->query($sql);
- Q8 K/ h5 ~! v: s$ _% ^: e  k& G. X  ]7 ]7 ], H% a# @
; ]* k' l% }: T1 \/ v* b. l
0 i* z3 r, w4 p
将其修改为
5 C, F5 g3 v- @" h! T0 x# q( q. t. ^( k9 A* J& \, @

6 z1 |  T3 V4 E$ g$ Y  [8 X! J% _* B/ Kif($number>=0) 4 U, @' S( w; g: o1 @
{ 0 N! k% I& v0 ]7 @- H0 V3 @$ i
  /* 处理货品库存 */ 1 a7 I* t* H. h2 G4 w6 X$ k/ p
  $products_query = true; & V( s* V5 c$ W" N$ s- E
  if (!empty($product_id)) 8 F) r( J" A3 h9 D+ [0 ^
  {
. n* g: R  N: J- t. V  a0 P' ]% W4 f   $sql = "UPDATE " . $GLOBALS['ecs']->table('products') .
% X2 t; V5 _/ o9 x, Q+ @" G         " SET product_number = product_number + $number  ".# j" ~6 @0 f" _' V7 Y
     " WHERE goods_id = '$good_id'  AND product_id = '$product_id' LIMIT 1"; / @) Y- b" E' }8 W; j  Y3 s; P& ^9 p
   $products_query = $GLOBALS['db']->query($sql); 7 _2 M% e! m5 p; `' c1 V* C
  }
) l( y0 f7 |: Z6 G  /* 处理商品库存 */
2 X( r" i3 _/ e, T- ]2 i+ `  $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') .
* y7 \9 {: f: l- \        " SET goods_number = goods_number + $number ".   3 J7 w1 e& l' `1 o9 e
    " WHERE goods_id = '$good_id' LIMIT 1";
' i( J7 s; u( e( w  $query = $GLOBALS['db']->query($sql);
9 b7 H0 a, V* w1 A( W" p} ) u8 D) x2 W5 E' d: o
else
8 g& u9 u7 y* _{
" A, w& j* B# m8 ~6 s, [& g) ~) g   /* 处理货品库存 */
- b7 v# u  w+ r/ a' `' N  $products_query = true; " z6 Q* s; T+ N% \6 ^
  $abs_number = abs($number); : d$ |) b. D; E% ~4 S
  if (!empty($product_id)) 6 k7 I: {: s* F3 c% e' t5 |, c
  { - ?: B' h8 O) L+ m
   $sql = "UPDATE " . $GLOBALS['ecs']->table('products') . " SET product_number =".
# V/ G. j& ~0 B         " if( product_number >= $abs_number,product_number - $abs_number,0)  ".. @4 e% v3 M2 t6 w# V
     " WHERE goods_id = '$good_id' AND product_id = '$product_id' LIMIT 1";
) ?& X  e( z" E! @   $products_query = $GLOBALS['db']->query($sql); + R. ~9 i: z/ O7 }
  }   _8 D) ]8 H* g& c
  /* 处理商品库存 */
4 r; C0 e- [6 V& [4 P/ G/ p* @# L2 U  $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . " SET goods_number = ".# A8 [# M' _4 d% ]0 M% i; e
          " if( goods_number >= $abs_number , goods_number - $abs_number ,0) ".   
! _- \4 Q+ S- \2 c    " WHERE goods_id = '$good_id' LIMIT 1"; ' H0 H7 N5 D2 R; D5 Q' A( _
  $query = $GLOBALS['db']->query($sql);   
: G. O% B9 c  O& O}
4 L, \. c5 [$ c1 \: c
$ H4 D  C" q) s( @) U5 L6 z
, {) o3 r& D/ \1 ]# l2)、4 B- J. k- r3 `. ?' _$ x  B
接下来,还需要修改后台文件  /admin/order.php,
/ U: M: o' W1 c8 U; E# h9 H找到下面代码,大概在811行左右。
& M9 x5 [1 l8 u1 y$ i( x
, C; t5 c- [& X. E% l4 }4 vif (!empty($value['product_id']))0 j# a2 `# c3 \* ^
{- g9 p2 Q8 F# }/ `# b
        $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "
* e6 z- c) ^3 ?+ O9 u                       SET product_number = product_number - " . $value['sums'] . "
( G6 C! M" |5 a+ S' x! ]                        WHERE product_id = " . $value['product_id'];0 d( Y+ A8 G( \
       $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
6 h1 t7 y8 m2 m% K/ j) \4 `) K) C}. s- u4 R' _4 v- o: ]8 d6 w

8 G1 x& a& M* @7 v2 T% K    $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "
/ p0 ~5 @6 Z3 x$ v2 q                SET goods_number = goods_number - " . $value['sums'] . "
& x  w7 r0 P8 n2 I, u2 _+ x                WHERE goods_id = " . $value['goods_id'];
8 R, M6 X3 h- e$ F* ^$ Y
+ A& ^7 w- S( T7 H+ a0 k    $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
7 t' ^4 W+ j) b
2 K+ A! `, i: K
2 s9 C) @% |$ g6 q/ T+ ^* F+ d# A" p3 _% `2 C4 W
将之修改为$ F2 {6 B3 |) x: h0 c0 s9 k. A
5 |! M* W: z4 f8 o) b8 b

: R' K. k1 T. D* t. X9 i  ~* vif (!empty($value['product_id']))
! a0 }6 r6 {2 Q1 L: m7 ?{
8 W0 Z+ N/ A# \       $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "% f6 {' `2 l1 x
       SET product_number = if( product_number > $value[sums], product_number -$value[sums],0 )  6 f" k- C  C7 r: Q3 f1 j
       WHERE product_id = " . $value['product_id'];" E1 X& ?" A) \$ f* ?/ R! {4 L
     $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
% y; A) z  r/ t; t" A9 ^ }
8 T, u% q. `2 t: I. O8 W* s' u
& x5 V' t) K; Q0 A    $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "
: E5 \/ z6 L) e: B     SET goods_number = if (  goods_number > $value[sums], goods_number -$value[sums],0 ) . w# V1 O/ y0 @1 I+ y% Y
     WHERE goods_id = " . $value['goods_id'];% x. ~  f$ c2 Z7 i, [+ K, X6 h

$ N( K8 H8 Z6 u* i. X $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
5 f" o" [) s. |- g- B& u/ h9 H0 I+ \, @3 B6 L

8 t5 D- L% r2 x4 N( ]
( ~2 q% [$ H5 u2 L: Z9 b
( N- ^% v% L0 X* \. r

全部评论 0

您需要登录后才可以回帖 立即登录
登录
0
0
0
返回顶部