prepare('SELECT id, is_admin, status FROM ' . tn('users') . ' WHERE id = ?'); $stmt->execute([$id]); $row = $stmt->fetch(); if (!$row) { $err = '用户不存在'; } elseif ((int) $row['is_admin'] === 1) { $err = '不能对管理员执行该操作'; } else { $next = ((int) $row['status'] === 1) ? 0 : 1; $db->prepare('UPDATE ' . tn('users') . ' SET status = ? WHERE id = ?')->execute([$next, $id]); $msg = $next === 0 ? '该用户已被封禁,无法再登录。' : '已解除封禁。'; } } // 删除 if (isset($_POST['delete'])) { verifyCsrf(); $id = (int) ($_POST['delete'] ?? 0); $stmt = $db->prepare('SELECT id, is_admin FROM ' . tn('users') . ' WHERE id = ?'); $stmt->execute([$id]); $row = $stmt->fetch(); if (!$row) { $err = '用户不存在'; } elseif ((int) $row['is_admin'] === 1) { $err = '不能删除管理员账户'; } else { $db->prepare('DELETE FROM ' . tn('users') . ' WHERE id = ? AND is_admin = 0')->execute([$id]); $msg = '用户已删除'; } } // 添加 if (isset($_POST['add'])) { verifyCsrf(); $u = trim($_POST['username'] ?? ''); $em = trim($_POST['email'] ?? ''); $pw = $_POST['password'] ?? ''; if (strlen($u) < 3) $err = '用户名至少 3 个字符'; elseif (!filter_var($em, FILTER_VALIDATE_EMAIL)) $err = '请填写有效的邮箱'; elseif (strlen($pw) < 6) $err = '密码至少 6 位'; else { $chk = $db->prepare('SELECT id FROM ' . tn('users') . ' WHERE username = ?'); $chk->execute([$u]); if ($chk->fetch()) { $err = '该用户名已存在'; } else { $hash = password_hash($pw, PASSWORD_DEFAULT); $code = genInviteCode(); $db->prepare('INSERT INTO ' . tn('users') . ' (username,password,email,invite_code,created_at) VALUES (?,?,?,?,NOW())') ->execute([$u, $hash, $em, $code]); $msg = '用户已添加'; } } } // 手动调整积分 if (isset($_POST['adjust'])) { verifyCsrf(); $target = trim($_POST['target'] ?? ''); $amount = (int) ($_POST['amount'] ?? 0); $remark = trim($_POST['remark'] ?? ''); if ($target === '') $err = '请填写用户 ID 或用户名'; elseif ($amount === 0) $err = '积分变动不能为 0'; elseif ($remark === '') $err = '请填写调整备注(便于留痕)'; else { if (is_numeric($target)) { $stmt = $db->prepare('SELECT id, is_admin FROM ' . tn('users') . ' WHERE id = ?'); $stmt->execute([(int) $target]); } else { $stmt = $db->prepare('SELECT id, is_admin FROM ' . tn('users') . ' WHERE username = ?'); $stmt->execute([$target]); } $row = $stmt->fetch(); if (!$row) { $err = '未找到该用户'; } else { $res = addPoints((int) $row['id'], 'manual', $amount, '后台手动调整:' . $remark); if ($res['ok']) { $msg = '已为用户 #' . (int) $row['id'] . ' ' . ($amount > 0 ? '增加' : '扣减') . ' ' . abs($amount) . ' 积分,当前余额 ' . $res['balance'] . ' 分。'; } else { $err = '调整失败:' . $res['error']; } } } } // 切换邮箱验证状态 if (isset($_POST['toggle_verify'])) { verifyCsrf(); $id = (int) ($_POST['toggle_verify'] ?? 0); $stmt = $db->prepare('SELECT id, verified FROM ' . tn('users') . ' WHERE id = ?'); $stmt->execute([$id]); $row = $stmt->fetch(); if (!$row) { $err = '用户不存在'; } else { $next = (int) $row['verified'] === 1 ? 0 : 1; $db->prepare('UPDATE ' . tn('users') . ' SET verified = ? WHERE id = ?')->execute([$next, $id]); $msg = $next === 1 ? '已标记该用户邮箱为已验证。' : '已将该用户邮箱设为未验证。'; } } $list = $db->query('SELECT id, username, email, status, points, verified, created_at FROM ' . tn('users') . ' WHERE is_admin = 0 ORDER BY created_at DESC')->fetchAll(); $orderCnt = $db->query('SELECT user_id, COUNT(*) c FROM ' . tn('orders') . ' GROUP BY user_id')->fetchAll(PDO::FETCH_KEY_PAIR); adminHeader('用户管理', 'users'); ?>

用户管理(共 人)

添加用户

手动调整积分

用户列表

还没有普通用户。

ID用户名邮箱积分订单数验证状态注册时间操作
已验证 未验证 正常' : '已封禁' ?>