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

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

来自版块: 站长杂谈发表于: 2015-8-9 00:24:59
25966
0
如本资源下载地址失效,请点击此处进行反馈
开通本站Svip会员,全站资源免费下
只要看完题目你就应该明白本次要讲的是什么问题了吧?
9 [! g7 `" g( s1 P) K) \需要补充的一点就是,这里说的商品库存,
  P) y& ]% R8 |既包括商品总库存(goods表里的goods_number字段),& O& {6 O. n; y3 Q1 G, g5 Q& m2 a
也包括货品库存,即不同属性对应的库存(products表里的product_number字段)。
" a" m$ k7 [# ]0 U2 p8 |5 P$ p. h& M5 w2 B0 T2 ]7 W$ j
至于为什么会突变为65535,而不是15565,也不是255255,( S' [, Q+ v( D3 a
那是因为这两个地段的类型都是无符号的 smallint(5),3 X. B# `# [( V; y) m3 f
取值范围为 0---65535,所以某个节点某个原因才会突变为 65535。
. V8 J) ~- K) }( n, p3 `' d% [
. f/ _  e" {- U) D; ~# c下面就具体说一说怎么来防止这种错误的发生。
) t) A) U  J7 K. ]# h! r- V, ?# _, O/ H
1)7 U' r0 Y2 M9 a+ r
第一步,主要是对 includes/lib_order.php 文件进行一下二次开发。
  ]* E7 y9 L: O/ o. V1 W, F先找到下面这段代码
( U/ ~5 L" E5 T1 H& X" @& Q' T+ C" G
$number = ($number > 0) ? '+ ' . $number : $number;
/ O* m4 J' Z+ D( i* a4 \
7 H" [& V3 i$ G- n  d    /* 处理货品库存 */, \' A* S" A- [3 l8 S- v
    $products_query = true;
) P* O" a# w! ^! Y    if (!empty($product_id))
+ v8 j+ |. k2 D+ W" w    {. K9 C+ }2 Y+ _6 F1 B$ `  R' Z! V
        $sql = "UPDATE " . $GLOBALS['ecs']->table('products') ."
, l9 r" V) [& K, p3 C) U2 B                SET product_number = product_number $number
  i5 v9 j1 D" F; D7 s                WHERE goods_id = '$good_id') R6 L5 V5 m) d: n. F: [  w, ]
                AND product_id = '$product_id'
( e7 I; K, l- M9 b" A                LIMIT 1";
3 N; @$ T6 A; A        $products_query = $GLOBALS['db']->query($sql);+ o5 B! b/ i  W* d* X1 w
    }
4 `0 }+ c* S( e+ N6 ^
, G: e0 l5 {# u( `- T9 n2 h* i    /* 处理商品库存 */9 x8 B7 }  u" _! L9 m  [
    $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') ."( C' S. V( {+ ^( ~
            SET goods_number = goods_number $number
6 C2 H/ k/ Z  |; H5 T            WHERE goods_id = '$good_id'8 j% Y2 Z. E: m5 L
            LIMIT 1";$ C0 A1 K* A# c) ?) O
    $query = $GLOBALS['db']->query($sql);" p1 \* x8 b# N: G8 l3 x7 K
' ?& X2 i6 m, J% W$ z) S

! U( y$ r3 E8 B3 g0 P& O9 s% {* j' N& P; p" h" |
将其修改为) [( y: C8 L! ?2 q

0 ~; B/ k4 i; c! Y/ _' r
, a, {8 m  D* n# Kif($number>=0)
1 ^; S- ]( g+ _5 M$ |9 R; G{
) d$ o$ @9 |% r% ?# V: u' @, q  /* 处理货品库存 */ 0 B+ J% I/ w5 L# }* u
  $products_query = true; * L3 v4 e  R3 ^9 Q8 W
  if (!empty($product_id))
+ X  H8 _  L2 }6 Y' i9 C# {  { 4 B; L) g8 n! s4 R
   $sql = "UPDATE " . $GLOBALS['ecs']->table('products') .4 M, m! B1 ^$ \- B8 k
         " SET product_number = product_number + $number  ".
" V6 Z- `- [: w* w- D- v     " WHERE goods_id = '$good_id'  AND product_id = '$product_id' LIMIT 1"; 8 N2 `. p5 V7 W  t# k9 a) f
   $products_query = $GLOBALS['db']->query($sql);
1 [" h& @3 @  O, r5 _0 W  }
1 }6 A" E% S" p2 _. z# p4 l+ V  /* 处理商品库存 */ " a! ]2 V+ H: ~* U
  $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') .
4 v) h, u. [# Z1 O0 _/ P9 J        " SET goods_number = goods_number + $number ".   " R; d' t. _. a/ t' B
    " WHERE goods_id = '$good_id' LIMIT 1"; 0 J+ _# Y; m# R" z/ v$ }
  $query = $GLOBALS['db']->query($sql);
, K+ h' j6 L" o5 j" g5 x}
+ J3 U: J; s8 q$ @! S: q( V7 ?else ! O. y. l0 u, ~( D2 c
{
) C: u/ h" g. N- Z   /* 处理货品库存 */
. P* [6 ~7 O3 Z6 E3 B  $products_query = true;
- I7 Z4 E# [0 B% S  $abs_number = abs($number);
' A- U3 _7 _0 P  if (!empty($product_id))
" H6 o" @9 H) U/ T  {
2 t9 @; [9 f9 c. K+ N1 r5 t* f, [   $sql = "UPDATE " . $GLOBALS['ecs']->table('products') . " SET product_number =".) d' l4 b# ?) a/ |) N
         " if( product_number >= $abs_number,product_number - $abs_number,0)  ".' U. d4 W$ Z* u# f6 u& H
     " WHERE goods_id = '$good_id' AND product_id = '$product_id' LIMIT 1";
! n0 g" E1 A: a2 Y   $products_query = $GLOBALS['db']->query($sql);
# o% t4 p, E0 a4 D7 ?  }
  k1 U( h, Q9 F/ ?9 {7 k& S2 x  /* 处理商品库存 */ 4 Z0 B, ?( V" |/ P5 G' I. d
  $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . " SET goods_number = ".
% ~; p, E: I2 `* L$ U7 u/ l          " if( goods_number >= $abs_number , goods_number - $abs_number ,0) ".   . x, ^) f/ ?2 m, M( ]$ q
    " WHERE goods_id = '$good_id' LIMIT 1";
, w0 O% c. h+ J! I  c. q% _  $query = $GLOBALS['db']->query($sql);   ' Q. Z4 v; O* S4 O+ O7 o
}( @( |4 [+ X6 j( R2 q
4 v6 n# [0 \# X/ k' ]

( S5 C; ~- z$ _2)、
, m5 l1 N& s8 x) z& C接下来,还需要修改后台文件  /admin/order.php,0 `! W5 [) P$ M" o- _: l
找到下面代码,大概在811行左右。
% H+ `9 A* ^+ o9 C: Q: g4 ~- g/ A
7 I+ {$ t, I2 g% v7 Sif (!empty($value['product_id']))0 {; J) x, I5 C! G2 e- Q
{$ [8 t2 x4 U1 R; e, Z( @
        $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "
1 [1 T) {, f6 v. x                       SET product_number = product_number - " . $value['sums'] . "
$ @" e. l7 f$ o" G                        WHERE product_id = " . $value['product_id'];1 r3 Z: m! {+ }  m3 W/ _3 c- i
       $GLOBALS['db']->query($minus_stock_sql, 'SILENT');5 ]0 \6 \" u' @
}8 X/ {! w4 A: t+ n
% _$ m6 O4 |& T& v( [
    $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "   B5 O  x3 |* G8 V
                SET goods_number = goods_number - " . $value['sums'] . " $ @) i  K, r. O/ L5 d% L( t- Z
                WHERE goods_id = " . $value['goods_id'];3 O9 P! B" b1 E( x. F$ S: O

0 ^: R4 Y" \6 P. h5 k    $GLOBALS['db']->query($minus_stock_sql, 'SILENT');+ a* F. x) r, V. |5 e

- X# w* T- t' d8 n7 L* S6 G, d7 m
& W( G7 A. W1 E. X  J- I2 j
3 B# n: N1 s# D+ L将之修改为
2 G9 i7 W+ H7 j" W! B6 ~$ d1 l6 i
, ^' M- s0 Y! m; u9 K" f  X8 }: X3 ^7 x7 A$ j$ g8 j4 W8 s5 s. Q: g
if (!empty($value['product_id']))
  L% f% {) ~1 |" U, O) J7 a1 ~7 H{' E1 k9 e5 c1 ~0 G! Q. K, h6 j
       $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "+ _" w- @7 @- q  M
       SET product_number = if( product_number > $value[sums], product_number -$value[sums],0 )  
$ J  @, e4 \$ S% r( K9 R       WHERE product_id = " . $value['product_id'];7 o9 K% p) b+ ~2 K% V7 F. V( i# Q
     $GLOBALS['db']->query($minus_stock_sql, 'SILENT');6 ~! Z7 c3 _8 l: A% [5 I* m. C( B
}
! S3 z; j4 L0 h! ~$ V+ [9 E
/ O' L( s# Q2 B% a    $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "/ H8 w4 L- q. I# q" O% ^0 I
     SET goods_number = if (  goods_number > $value[sums], goods_number -$value[sums],0 ) / a$ K+ ?3 c7 c- s5 c8 s
     WHERE goods_id = " . $value['goods_id'];8 b% P6 V2 ~' N  ?! f2 G

% _7 R* q2 n; \  F3 D* i $GLOBALS['db']->query($minus_stock_sql, 'SILENT');$ z6 n- R+ I( F+ `" p
+ N" y; F7 M. s, `
5 ], W  ]' b- f5 _/ Z6 h# j

4 t' P9 @* w3 D& e7 s" @, f, l6 u+ p1 m% A1 G- s4 w

全部评论 0

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