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