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

将Session用户数据转为变量遇问题:拳击匹配网站开发求助

帮你解决会话用户变量与匹配功能的问题

嘿,我看了你这段代码,发现几个关键问题,同时帮你补上拳击练习网站需要的同属性用户匹配逻辑,一步步来:

首先,现有代码的核心问题

  • SQL注入风险拉满:直接把$_GET["userID"]拼进SQL里,恶意用户随便构造个参数就能搞乱你的数据库,这绝对不能留。
  • 没用到会话用户:你要的是针对当前会话用户操作,但现在靠URL传userID,既不安全也不符合会话的设计逻辑,应该从$_SESSION里取当前登录用户的ID才对。
  • 缺匹配逻辑:代码只查了单个用户的信息,完全没实现和同体重用户匹配的核心需求。

修正后的完整代码(带匹配功能)

<?php
session_start();

// 先拦未登录用户:必须有会话里的userID才能访问
if (!isset($_SESSION['userID'])) {
    header("Location: login.php"); // 跳去登录页
    exit();
}

include "connection.php";

// 从Session拿当前用户ID,这才是正确的姿势
$currentUserID = $_SESSION['userID'];

// 用预处理语句查当前用户信息——彻底杜绝SQL注入
$stmt = $con->prepare("SELECT * FROM userdetails WHERE userID = ?");
$stmt->bind_param("i", $currentUserID); // "i"代表整数,要是你userID是字符串就改成"s"
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    $currentUser = $result->fetch_assoc();
    // 输出当前用户信息,记得用htmlspecialchars防XSS
    echo "<div>";
    echo "<br>First name: " . htmlspecialchars($currentUser["firstname"]);
    echo "<br>Weight: " . htmlspecialchars($currentUser["weight"]) . " kg";
    echo "</div>";

    // 重点:匹配同体重的其他用户
    echo "<h3>你的同体重练习伙伴</h3>";
    $matchStmt = $con->prepare("SELECT * FROM userdetails WHERE weight = ? AND userID != ?");
    // 这里"d"是浮点数,要是weight是整数就改成"i",根据你数据库字段类型调整
    $matchStmt->bind_param("di", $currentUser["weight"], $currentUserID);
    $matchStmt->execute();
    $matchResult = $matchStmt->get_result();

    if ($matchResult->num_rows > 0) {
        echo "<ul>";
        while ($matchUser = $matchResult->fetch_assoc()) {
            echo "<li>" . htmlspecialchars($matchUser["firstname"]) . " - 体重: " . htmlspecialchars($matchUser["weight"]) . " kg</li>";
        }
        echo "</ul>";
    } else {
        echo "<p>暂时还没找到和你体重相同的练习伙伴哦</p>";
    }

    $matchStmt->close();
} else {
    echo "<p>找不到当前用户的信息,请检查登录状态</p>";
}

// 记得关闭语句和连接,养成好习惯
$stmt->close();
$con->close();
?>

几个关键改进的说明

  1. 会话验证:先检查$_SESSION['userID'],确保只有登录用户能进来,符合你说的“会话用户”需求。
  2. 预处理语句:用prepare()+bind_param()绑定参数,再也不怕SQL注入了,这是PHP操作数据库的标准安全做法。
  3. 匹配逻辑:专门加了查询同体重但不同ID用户的语句,直接实现你要的匹配功能。
  4. 输出安全:所有从数据库拿出来的内容都用htmlspecialchars()转义,防止恶意脚本注入(XSS攻击)。

内容的提问来源于stack exchange,提问作者Richard Pearson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:08:53