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

如何实现仅允许已购商品用户提交评价的验证功能?

商品评价系统的用户购买验证方案(适配Slug传参)

1. 先通过Slug获取商品ID

前端传参是商品slug,第一步需要将其转换为商品ID,才能关联订单明细进行校验:

// 获取GET参数中的商品slug
$product_slug = $_GET['product'];

// 从商品表查询对应ID(假设表名为products,slug字段为`slug`,主键为`id`)
$stmt = $pdo->prepare("SELECT id FROM products WHERE slug = ?");
$stmt->execute([$product_slug]);
$product = $stmt->fetch(PDO::FETCH_ASSOC);

// 商品不存在时直接拦截
if (!$product) {
    exit("该商品不存在");
}
$product_id = $product['id'];

2. 验证用户是否购买过该商品

关联订单主表(sales)和订单明细(details),用当前用户ID和商品ID做校验:

$current_user_id = $user['id'];

// 统计用户是否有包含该商品的有效订单
$stmt = $pdo->prepare("
    SELECT COUNT(*) AS purchased 
    FROM sales s
    INNER JOIN details d ON s.id = d.sale_id
    WHERE s.user_id = ? AND d.product_id = ?
    -- 可选:如果订单有状态区分,只允许已完成订单评价,可添加 AND s.status = 'completed'
");
$stmt->execute([$current_user_id, $product_id]);
$purchase_check = $stmt->fetch(PDO::FETCH_ASSOC);

// 校验通过则允许提交评价,否则拦截
if ($purchase_check['purchased'] > 0) {
    // 执行评价提交逻辑(插入评价表等操作)
} else {
    exit("你未购买过该商品,无法提交评价");
}

关键注意点

  • 给商品表的slug字段添加唯一约束,避免重复slug导致查询混乱
  • 全程使用预处理语句,杜绝SQL注入风险
  • 若订单有状态区分(比如待付款、已完成),建议只允许对已完成的订单商品评价,避免用户恶意评价未完成订单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:10:17