ecshop2.7.3bug 此单发货数量不能超出订单商品数量


接手了一个ecshop2.7.3版本的商城,发现后台发货时无法修改发货状态,然后查看库存发现没有缺货。于是开始追踪错误。

“此单发货数量不能超出订单商品数量”提示的是这些文字,所以我先找到了languages/zh_cn/admin/order.php的语言配置文件。

第74行:$_LANG['act_ship_num'] = '此单发货数量不能超出订单商品数量';

查找调用此全局变量的页面,果然,对应的admin/order.php文件。

分析模板文件,order_delivery_info.htm 


      {foreach from=$goods.package_goods_list item=package}
      <tr>
        <td>-- <a href="../goods.php?id={$package.goods_id}" target="_blank">{$package.goods_name}</a></td>
        <td>{$package.goods_sn}</td>
        <td>{$package.product_sn}</td>
        <td>{$package.goods_attr_str}</td>
        {if $suppliers_list neq 0}
        <td><div align="right">{$suppliers_name[$package.suppliers_id]|default:$lang.restaurant}</div></td>
        {/if}
        <td><div align="right">{$package.storage}</div></td>
        <td><div align="right">{$package.order_send_number}</div></td>
        <td><div align="right">{$package.sended}</div></td>
        <td><div align="right"><input name="send_number[{$goods.rec_id}][{$package.g_p}]" type="text" id="send_number_{$goods.rec_id}_{$package.g_p}" value="{$package.send}" size="10" maxlength="11" {$package.readonly}/></div></td>
      </tr>
      {/foreach}

send_number[{$goods.rec_id}][{$package.g_p}]

数组通过form表单传递到order.php?act=operate_post动作下。这个数组蛮别致的,个人理解是用来区分多个商品的信息,以免商品订单出现混淆。

追踪到order.php下的act=operate_post下,

/*------------------------------------------------------ */
//-- 操作订单状态(处理批量提交)
/*------------------------------------------------------ */

elseif ($_REQUEST['act'] == 'batch_operate_post')
{
    /* 检查权限 */
    admin_priv('order_os_edit');

    /* 取得参数 */
    $order_id   = $_REQUEST['order_id'];        // 订单id(逗号格开的多个订单id)
    $operation  = $_REQUEST['operation'];       // 订单操作
    $action_note= $_REQUEST['action_note'];     // 操作备注

    $order_id_list = explode(',', $order_id);

    /* 初始化处理的订单sn */
    $sn_list = array();
    $sn_not_list = array();
好吧 一直往下分析……头晕眼花中终于找到了可疑目标

  /* 发货数量与总量不符 */
                if (!isset($value['package_goods_list']) || !is_array($value['package_goods_list']))
                {
                    $sended = order_delivery_num($order_id, $value['goods_id'], $value['product_id']);
					//echo $sended."<br>";
					//echo $send_number[$value['rec_id']].'<br>';
					//print_r($value);
                    if (($value['storage'] - $sended - $send_number[$value['rec_id']]) < 0)
                    {
                        /* 操作失败 */
                        $links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=info&order_id=' . $order_id);
                        sys_msg($_LANG['act_ship_num'], 1, $links);
                    }
                }
                else
                {
                    /* 超值礼包 */
                    foreach ($goods_list[$key]['package_goods_list'] as $pg_key => $pg_value)
                    {
                        if (($pg_value['order_send_number'] - $pg_value['sended'] - $send_number[$value['rec_id']][$pg_value['g_p']]) < 0)
                        {
                            /* 操作失败 */
                            $links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=info&order_id=' . $order_id);
                            sys_msg($_LANG['act_ship_num'], 1, $links);
                        }
                    }
                }

调试后发现数组$value中显示库存的数组id并非['goods_number']字段,而是['storage']。完结


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值