You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP分销系统注册用户按7人组分配上级层级逻辑开发求助

分销层级注册逻辑解决方案

核心规则计算逻辑

你这套规则本质是每7个注册用户为1个分组,适配无限注册场景只需要用数学计算即可实现,不需要复杂的层级查询:

  • 先统计当前系统已注册的用户总数 $total_users,新注册用户的序号就是 $new_user_sn = $total_users + 1
  • 计算当前新用户所属分组:$group = floor(($new_user_sn - 1) / 7)
  • 对应分组的上级(组头)序号为:$group_leader_sn = $group * 7 + 1
    • 如果 $new_user_sn == $group_leader_sn:说明当前新用户是组头,无上级
    • 否则:当前新用户的上级就是序号为$group_leader_sn的用户

现有代码问题修正

你现有代码存在以下几个问题需要调整:

  • 统计用户数应该查询users表而非affi表
  • 直接拼接SQL参数存在SQL注入风险,需要用PDO预处理绑定参数
  • 原有代码逻辑只覆盖了前7个用户的场景,未适配通用规则
  • 代码中存在变量调用错误:$result = $create_user->fetch(PDO::FETCH_OBJ) 应为$get_user->fetch

修正后完整代码

if(isset($_POST['submit'])) {
    $name = trim($_POST['name']);
    $email = trim($_POST['email']);
    $password = trim($_POST['password']);
    // 密码建议加密存储,比如用password_hash
    $hash_password = password_hash($password, PASSWORD_DEFAULT);

    // 先统计当前已注册用户总数
    $count_pre = $db->prepare("SELECT COUNT(*) as total FROM users");
    $count_pre->execute();
    $count_res = $count_pre->fetch(PDO::FETCH_OBJ);
    $total_users = $count_res->total;
    $new_user_sn = $total_users + 1;

    // 计算分组和组头序号
    $group = floor(($new_user_sn - 1) / 7);
    $group_leader_sn = $group * 7 + 1;

    // 开启事务保证数据一致性
    $db->beginTransaction();
    try {
        // 插入新用户
        $create_user = $db->prepare("INSERT INTO users (name, email, password) VALUES (?, ?, ?)");
        $create_user->execute([$name, $email, $hash_password]);
        $new_user_id = $db->lastInsertId();

        // 处理从属关系
        if ($new_user_sn == $group_leader_sn) {
            // 是组头,无上级
            $refer = $db->prepare("INSERT INTO refer_customer (email) VALUES (?)");
            $refer->execute([$email]);
        } else {
            // 查询组头用户的ID
            $leader_pre = $db->prepare("SELECT id FROM users ORDER BY id ASC LIMIT ?, 1");
            $leader_pre->bindValue(1, $group_leader_sn - 1, PDO::PARAM_INT);
            $leader_pre->execute();
            $leader = $leader_pre->fetch(PDO::FETCH_OBJ);
            
            $refer = $db->prepare("INSERT INTO refer_customer (refere_id, email) VALUES (?, ?)");
            $refer->execute([$leader->id, $email]);
        }
        $db->commit();
        header("Location: Index.php");
        exit();
    } catch (Exception $e) {
        $db->rollBack();
        // 可根据需求添加错误处理逻辑
        die("注册失败:" . $e->getMessage());
    }
}

补充说明

  • 代码中增加了密码加密、事务处理逻辑,保证数据安全和一致性
  • 组头用户的查询逻辑是按用户ID升序排列,取对应序号的用户,和注册顺序完全对齐
  • 这套逻辑支持无限用户注册,不需要调整规则即可自动适配所有分组

内容的提问来源于stack exchange,提问作者Dipo Deen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:18:03