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
相关产品推荐
相关产品推荐

