只要看完题目你就应该明白本次要讲的是什么问题了吧?
) 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
|