prepare('SELECT * FROM ' . tn('products') . ' WHERE id = ? AND status = 1'); $stmt->execute([$id]); $product = $stmt->fetch(); if (!$product) { header('Location: index.php'); exit; } // 当前登录用户是否已购买该商品,并取最新发货 / 商品信息 $hasBought = false; $purchase = null; if ($user = currentUser()) { $bstmt = db()->prepare( 'SELECT 1 FROM ' . tn('orders') . ' o INNER JOIN ' . tn('order_items') . ' oi ON oi.order_id = o.id WHERE o.user_id = ? AND oi.product_id = ? AND o.status IN ("paid","shipped","completed") LIMIT 1' ); $bstmt->execute([$user['id'], $id]); $hasBought = (bool) $bstmt->fetchColumn(); $pstmt = db()->prepare( 'SELECT d.* FROM ' . tn('order_deliveries') . ' d INNER JOIN ' . tn('orders') . ' o ON o.id = d.order_id INNER JOIN ' . tn('order_items') . ' oi ON oi.order_id = o.id WHERE o.user_id = ? AND oi.product_id = ? AND o.status IN ("paid","shipped","completed") ORDER BY d.id DESC LIMIT 1' ); $pstmt->execute([$user['id'], $id]); $purchase = $pstmt->fetch(); } $err = $ok = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add'])) { verifyCsrf(); $qty = max(1, (int) ($_POST['qty'] ?? 1)); if ($product['stock'] <= 0) { $err = __('product_page.err_out_of_stock'); } elseif ($qty > $product['stock']) { $err = str_replace('{max}', $product['stock'], __('product_page.err_low_stock')); } else { if (!isset($_SESSION['cart'])) $_SESSION['cart'] = []; $cur = (int) ($_SESSION['cart'][$id] ?? 0); $_SESSION['cart'][$id] = $cur + $qty; header('Location: cart.php'); exit; } } require 'includes/header.php'; ?>
<?= h($product['name']) ?>

0): ?>