呵呵……其实是个小问题,但是不能不说是Ecshop团队中的测试部门不够尽职。在红包使用过程中,如果数值较小例如红包序列号是:1000056556这样的,是没有问题的,如果超过一定数值(我遇到的是:2745225862之类)之后就会在添加红包的时候误报为:该红包不存在。
问题在于,在user.php的添加红包流程中,Ecshop团队在post上来的bonus_sn上应用了intval函数,该段代码类似于下:
$bouns_sn = isset($_POST[‘bonus_sn’]) ? intval($_POST[‘bonus_sn’]) : ”;
而intval函数并非我们想象中的听话,在遇到一些超大的数据的时候例如:intval(2745225862)返回值并非我们期望的是:2745225862,而是-1549741434,这就会导致lib_transaction.php在执行add_bonus函数的时候,在数据库中无法查询到该红包————要是能查到才怪呢!故而报:该红包不存在,的提示。
把user.php的添加红包流程中的这句话:
$bouns_sn = isset($_POST[‘bonus_sn’]) ? intval($_POST[‘bonus_sn’]) : ”;
修改为:
$bouns_sn = isset($_POST[‘bonus_sn’]) ? trim($_POST[‘bonus_sn’]) : ”;
就可以了!
具体关于PHP 中intval为啥会这样返回,期待有钻研精神的兄弟们留言给个答案,以补充该文,谢谢。
补充:
在PHP中intval的取值范围:
与操作系统相关,
32位系统上为-2147483648到2147483647,
64位系统上为-9223372036854775808到9223372036854775807
有因有果,关于ecshop的红包添加报红包不存在的提示,至此圆满解决。
没有人会帮你一辈子,所以你要奋斗一生。