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

PHP开发userads页面显示所有用户广告问题及代码修改需求

问题分析与修改方案

核心问题

你的userads页面未对广告图片添加当前登录用户ID的过滤逻辑,导致拉取并展示了服务器上所有用户的图片资源。

常见未过滤场景的修改方案

场景1:从数据库读取广告记录

假设你当前的查询代码未做用户过滤,类似这样:

// 未过滤的错误写法
$stmt = $pdo->query("SELECT * FROM ads_images");
$all_ads = $stmt->fetchAll(PDO::FETCH_ASSOC);

修改步骤:

  1. 确保登录时已将用户ID存入会话:
// 登录成功时执行
session_start();
$_SESSION['user_id'] = $user_id; // $user_id为当前用户的数据库唯一标识
  1. 带用户ID过滤查询:
session_start();
// 校验用户是否登录,未登录则跳转登录页
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

$user_id = $_SESSION['user_id'];
// 绑定用户ID参数,避免SQL注入
$stmt = $pdo->prepare("SELECT * FROM ads_images WHERE user_id = ?");
$stmt->execute([$user_id]);
$user_ads = $stmt->fetchAll(PDO::FETCH_ASSOC);

之后遍历$user_ads渲染图片即可。

场景2:直接读取服务器图片目录

假设你当前直接遍历整个上传目录,类似这样:

// 未过滤的错误写法
$images = glob('/path/to/uploads/*');

修改步骤:

  1. 上传逻辑提前优化:按用户ID划分存储目录,比如上传时将图片存入/uploads/user_{$user_id}/
  2. 读取时仅访问当前用户的目录:
session_start();
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

$user_id = $_SESSION['user_id'];
$user_upload_dir = "/path/to/uploads/user_{$user_id}/";
// 仅读取当前用户目录下的图片文件
$images = glob($user_upload_dir . "*.{jpg,jpeg,png,gif}", GLOB_BRACE);

额外安全建议

  • 对会话中的user_id做二次校验,比如查询数据库确认该用户ID真实存在,防止伪造会话
  • 禁止直接通过URL暴露服务器文件路径,建议通过PHP接口输出图片,同时校验访问权限
  • 上传图片时对文件名做随机重命名,避免文件名泄露敏感信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:57:27