php 兑奖券兑换功能_理一理老师的代码,以及功能如何实现?

本文详细解析了PHP实现兑奖券兑换功能的过程,包括查询、修改、插入等数据库操作。首先介绍如何根据会员ID和商品ID查询积分信息,接着讲解如何更新会员积分和商品库存,以及在遇到问题时如何调试和修复代码,如在插入订单时确保所有字段完整。文章还提及了代码复用和时间成本的考虑。
摘要由CSDN通过智能技术生成

理一理老师的代码,以及功能如何实现?

本文所说的功能是基于老师给代码所能实现的

因此所谓的功能,不外乎增改查,以积分兑换为例

  1. 根据postman传入member_id和goods_id,查询对应的会员与积分商品信息
  2. 比较积分,判断是否足够兑换
  3. 满足时,分别修改会员积分及积分商品的库存,并生成订单

可以看出,功能的思考方向应该是在数据库的表操作上,该功能最后会影响哪些表,会对表进行哪些操作,围绕这些操作,我们可以扩展一些逻辑,下面以积分为例。

一、查询

查询信息这步就没有什么好说的了,不管什么功能,我们都不能直接使用用户传递过来的数据(无关紧要的除外),都需要通过数据库查询出来,一般通过id查询,可以查询单个用户信息或者全部信息。

这一步在原代码中已经有了较好的包装实现,具体在DB.php

public function select($conn, $table, $field, $where){
    $sql = "SELECT " . $field . " FROM `" . $table . "` WHERE " . $where;
    try {
        $result = mysqli_query($conn, $sql);

        if (!$result) {
            return null;
        }

        return mysqli_fetch_all($result, MYSQLI_ASSOC);
    } catch (\Exception $e) {
        return null;
    }
}

从代码中可以看出,mysqli_query(sql)是其核心调用API,

$conn 是数据库连接

$table 是要查询的表名

$field 是要查询的字段

$where 是要查询的条件

由这些条件,共同组装一条sql语句。(英文的句号“.”相当于Java中的字符串连接符“+”)。

For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries, mysqli_query() will return a mysqli_result object.
For other successful queries mysqli_query() will return TRUE.
Returns FALSE on failure.

这是mysqli_query源码关于返回值的注释,从这里可以看出,对于成功执行SELECT语句的返回值,是将查询结果返回。

使用:

$conn = (new DB())->connect();
$db = new DB();
$member = $db->select($conn, 'member', '*', 'member_id=' . $member_id);
//或者
$member = (new DB())->select($conn, 'member', '*', 'member_id=' . $member_id);

使用var_dump($member)可以看到

f8a10da29e903c7460fe9d2bb7401057.png

返回的信息是以数组存储的,这里有个小细节,从结构我们可以看出这是一个二维数组,因此取积分时应该用

$score = member[0]['score'];

查询单个信息也是同样道理

二、修改

修改update方法也是同理,区别只是返回值只会返回true或false,这点可以在源码注释中看到

以修改库存为例,$stock为查询出来的库存

$res = (new DB())->update($conn, 'score_goods', 'stock=' . ($stock - 1), 'sg_id=' . $sg_id);
var_dump($res);//检查操作是否成功,用于调试

三、插入

关于生成订单,也就是插入,老师的ImportOrder.php是存在问题的,经过测试发现,显示订单申报成功,实际上并不会在order_info表中插入一条数据,发现问题出现在sql上

原表的字段有

69c1fcf159acb274cdb7c1036a4ce4eb.png

而在代码中,只有5个字段

$insert = [
'"' . $data['order_no'] . '"',
'"' . $data['person_name'] . '"',
'"' . $data['person_tel'] . '"',
'"' . $data['person_idcard'] . '"',
'"' . $data['order_fee'] . '"',
];

$sql = 'INSERT INTO `order_info` (order_no,person_name,person_tel,person_idcard,order_fee) VALUES ('. implode(',', $insert) . ')';

因此是需要补足的

$insert = [
'"' . $data['order_no'] . '"',
'"' . $data['person_name'] . '"',
'"' . $data['person_tel'] . '"',
'"' . $data['person_idcard'] . '"',
'"' . $data['order_fee'] . '"',

'"' . $data['sg_id'] . '"',
'"' . $data['order_time'] . '"',
'"' . $data['discount_fee'] . '"',
'"' . $data['fee'] . '"',
'"' . $data['num'] . '"',
'"' . $data['member_id'] . '"',
'"' . $data['saler_id'] . '"',
];

$sql = 'INSERT INTO `order_info` (order_no,person_name,person_tel,person_idcard,order_fee,sg_id,order_time,discount_fee,fee,num,member_id,saler_id) VALUES ('. implode(',', $insert) . ')';

接下来就可以使用postman测试一下了

b17fdf51efc34c12080beff0761cd024.png

e74101b56a46aa43ae0e0bdbe804ff6c.png

c985b0e4ebb5febf5aa02dfc0a075b1b.png

可以看到,插入成功了

四、闲聊

最近有同学找我想要借鉴一下我的作业,其实吧我写的也是十分的简陋,而且里面调试所用信息皆为我的学号,没有太多的参考的意义,我也尝试过单独写,发现虽然功能简单,但是也十分耗时,写一份基本就一天没了d7cab20ac00643cd8359bfa61f06de30.png,考虑到时间成本,我个人水平有限,对于同学们的请求,我也很为难。

有想过出简单的版本,但是怕同学们不会修改,导致重复,被老师发现,目前暂时没有较好的解决办法,如果有同学有好的想法,可以跟我聊聊42b0958ee6ae677b3eb65f23b7bf0c07.png

写作不易,觉得还不错的点赞5dd13049cf1b0c0b5ffd5ce0e38ad4b0.png,支持一下,谢谢870ed7336eeeb71c9911e8ec6992bdfc.png

如果还没调通,请仔细看这篇文章如何调通老师给的代码?

很多人会出现这个情况

c74b9c93b8a491848fc82ee426925599.png

这说明,漏了文章说的要去www/0929/DB.php中修改密码为自己改的密码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值