php实现购物商城
PHP 实现购物商城的关键步骤
数据库设计
创建必要的数据库表,包括用户表、商品表、订单表和购物车表。用户表存储用户信息,商品表存储商品详情,订单表记录交易信息,购物车表临时保存用户选择的商品。
用户表结构示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
商品表结构示例:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
image VARCHAR(255)
);
用户认证系统
实现用户注册和登录功能,确保用户数据安全。使用 PHP 的密码哈希函数处理用户密码。
注册功能代码片段:
$hashed_password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt = $pdo->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
$stmt->execute([$_POST['username'], $hashed_password, $_POST['email']]);
登录验证代码片段:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_POST['username']]);
$user = $stmt->fetch();
if ($user && password_verify($_POST['password'], $user['password'])) {
$_SESSION['user_id'] = $user['id'];
}
商品展示功能
从数据库检索商品信息并在前端展示。实现分页功能以优化大量商品的展示。
商品检索代码片段:
$per_page = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $per_page;
$stmt = $pdo->prepare("SELECT * FROM products LIMIT ? OFFSET ?");
$stmt->bindValue(1, $per_page, PDO::PARAM_INT);
$stmt->bindValue(2, $offset, PDO::PARAM_INT);
$stmt->execute();
$products = $stmt->fetchAll();
购物车功能
使用会话或数据库存储用户选择的商品。实现添加商品、移除商品和更新数量的功能。
添加商品到购物车代码片段:
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
$_SESSION['cart'][$_POST['product_id']] = $_POST['quantity'];
订单处理
用户结账时将购物车内容转为订单。计算总价并记录订单详情。
创建订单代码片段:
$total = 0;
foreach ($_SESSION['cart'] as $product_id => $quantity) {
$stmt = $pdo->prepare("SELECT price FROM products WHERE id = ?");
$stmt->execute([$product_id]);
$product = $stmt->fetch();
$total += $product['price'] * $quantity;
}
$stmt = $pdo->prepare("INSERT INTO orders (user_id, total, created_at) VALUES (?, ?, NOW())");
$stmt->execute([$_SESSION['user_id'], $total]);
$order_id = $pdo->lastInsertId();
支付集成
集成第三方支付网关如 PayPal 或 Stripe。处理支付成功或失败的回调。
Stripe 支付示例:
\Stripe\Stripe::setApiKey('sk_test_your_key');
$charge = \Stripe\Charge::create([
'amount' => $total * 100,
'currency' => 'usd',
'source' => $_POST['stripeToken'],
'description' => 'Order payment'
]);
安全措施
实施 SQL 注入防护、XSS 防护和 CSRF 防护。使用预处理语句处理数据库查询,过滤用户输入。
预处理语句示例:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([filter_var($_POST['email'], FILTER_SANITIZE_EMAIL)]);
性能优化
使用缓存技术如 Redis 或 Memcached 减轻数据库负载。优化图片和静态资源的加载。
Redis 缓存示例:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
if (!$redis->get('products')) {
$products = $pdo->query("SELECT * FROM products")->fetchAll();
$redis->set('products', serialize($products));
} else {
$products = unserialize($redis->get('products'));
}
测试与部署
进行全面测试后,将应用部署到生产环境。配置合适的服务器环境和域名。
部署注意事项:
- 确保 PHP 版本兼容
- 配置正确的文件权限
- 设置数据库备份策略
- 启用 HTTPS 加密传输






