You need to enable JavaScript to run this app. PHP+SQL PDO开发:如何实现账户页仅展示登录用户本人提交的领养申请
优惠活动
大模型
产品
解决方案
定价
更多

PHP+SQL PDO开发:如何实现账户页仅展示登录用户本人提交的领养申请

实现「仅展示当前登录用户领养申请」的调整方案

核心逻辑说明

现有request表已预设userId字段,该字段用于关联提交申请的用户在account表的主键id。原查询语句SELECT * FROM request未加筛选规则,因此会返回全表所有用户的申请数据,只需在查询语句后增加匹配当前登录用户ID的WHERE条件即可实现需求。

分步调整操作

1. 确认登录态存储

用户登录成功后,需将对应账户的account.id值存储在服务端会话(session)中,作为后续身份校验和数据筛选的依据。在账户页查询数据前,先增加登录态判断,未登录用户直接跳转登录页,避免越权访问。

2. 调整SQL查询语句

结合现有PDO数据库连接逻辑,采用预处理参数绑定的方式编写带筛选规则的查询,避免SQL注入风险:

// 开启会话读取登录态
session_start();
// 校验用户是否已登录
if (empty($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}
// 获取当前登录用户的ID,强制转为整数类型避免异常值
$currentUserId = (int)$_SESSION['user_id'];

try {
    // 带筛选条件的SQL语句:仅匹配userId等于当前登录用户ID的申请
    $sqlstr = "SELECT * FROM request WHERE userId = :current_user_id";
    // 预处理SQL
    $stmt = $db->prepare($sqlstr);
    // 绑定参数值
    $stmt->bindParam(':current_user_id', $currentUserId, PDO::PARAM_INT);
    // 执行查询
    $stmt->execute();
    // 获取查询结果集
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 原有循环输出表格的逻辑保持不变,可同步修正原代码中多余的<tr>标签结构问题
    foreach ($rows as $row) {
        echo "<tr>
                <td>{$row['fullname']}</td>
                <td>{$row['email']}</td>
                <td>{$row['address']}</td>
                <td>{$row['postcode']}</td>
                <td>{$row['present']}</td>
                <td>{$row['category']}</td>
              </tr>";
    }
    echo "</table> <br>";
} catch (PDOException $ex) {
    echo "查询领养申请数据出错,请稍后重试<br>";
    echo "错误详情:" . $ex->getMessage();
}

校验规则注意事项

  • 提交领养申请的环节需同步做数据关联:用户提交表单时,必须将当前登录用户的account.id写入request表的userId字段,否则即便查询逻辑正确,也无法匹配到对应申请记录。
  • 匹配规则无需跨表:因request表已存储userId字段,可直接按ID值筛选,不需要通过关联查询account表的email等字段做匹配,减少查询性能消耗。
  • 禁止直接拼接SQL字符串:不可将会话存储的用户ID直接拼接到SQL语句中(例如SELECT * FROM request WHERE userId = ".$_SESSION['user_id']),这种写法存在SQL注入安全漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 15:24:03