怎么用php写购物车
时间 : 2023-03-23 07:16:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

购物车是一个常见的在线购物系统中必不可少的一部分。购物车主要功能是将顾客要购买的商品信息保存在一个中央位置,以便于顾客随时查看和管理,最后确认订单后一次性提交。在本篇文章中,我将介绍如何使用PHP编写一个简单的购物车系统。

1. 创建数据库

首先,我们需要创建一个MySQL数据库,用于存储商品信息和购物车数据。

创建数据库命令:

CREATE DATABASE IF NOT EXISTS shopping_cart;

创建商品表命令:

CREATE TABLE IF NOT EXISTS products (

id INT(11) AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(255) NOT NULL,

description TEXT,

price DECIMAL(10,2) NOT NULL,

image VARCHAR(255),

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

创建购物车表命令:

CREATE TABLE IF NOT EXISTS cart (

id INT(11) AUTO_INCREMENT PRIMARY KEY,

product_id INT(11) NOT NULL,

quantity INT(11) NOT NULL,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

2. 连接数据库

使用PHP连接数据库,这里我们使用PDO来连接。

<?php

// 数据库配置

$servername = "localhost";

$username = "root";

$password = "password";

$dbname = "shopping_cart";

// 连接数据库

try {

$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch(PDOException $e) {

echo "Connection failed: " . $e->getMessage();

}

?>

3. 显示商品列表和添加商品到购物车

创建一个PHP文件来显示商品列表和添加商品到购物车。

<?php

require("connection.php");

// 获取商品列表

$stmt = $pdo->prepare("SELECT * FROM products");

$stmt->execute();

$products = $stmt->fetchAll();

// 添加商品到购物车

if(isset($_POST['add_to_cart'])) {

$product_id = $_POST['product_id'];

$quantity = $_POST['quantity'];

$stmt = $pdo->prepare("INSERT INTO cart(product_id, quantity) VALUES(:product_id, :quantity)");

$stmt->bindParam(':product_id', $product_id);

$stmt->bindParam(':quantity', $quantity);

$stmt->execute();

header("Location: index.php");

exit();

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>购物车</title>

</head>

<body>

<h1>商品列表</h1>

<table>

<tr>

<th>商品名称</th>

<th>价格</th>

<th>图片</th>

<th>操作</th>

</tr>

<?php foreach($products as $product): ?>

<tr>

<td><?php echo $product['name']; ?></td>

<td><?php echo $product['price']; ?></td>

<td><img src="<?php echo $product['image']; ?>" alt="<?php echo $product['name']; ?>"></td>

<td>

<form method="post" action="">

<input type="hidden" name="product_id" value="<?php echo $product['id']; ?>">

<input type="number" name="quantity" value="1" min="1">

<input type="submit" name="add_to_cart" value="加入购物车">

</form>

</td>

</tr>

<?php endforeach; ?>

</table>

</body>

</html>

4. 显示购物车

创建一个PHP文件来显示购物车中的商品列表。

<?php

require("connection.php");

// 获取购物车列表

$stmt = $pdo->prepare("SELECT cart.id, products.name, products.price, cart.quantity FROM cart LEFT JOIN products ON cart.product_id = products.id");

$stmt->execute();

$cart_items = $stmt->fetchAll();

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>购物车</title>

</head>

<body>

<h1>购物车</h1>

<table>

<tr>

<th>商品名称</th>

<th>价格</th>

<th>数量</th>

<th>小计</th>

<th>操作</th>

</tr>

<?php

$total = 0;

foreach($cart_items as $cart_item):

$subtotal = $cart_item['quantity'] * $cart_item['price'];

$total += $subtotal;

?>

<tr>

<td><?php echo $cart_item['name']; ?></td>

<td><?php echo $cart_item['price']; ?></td>

<td><?php echo $cart_item['quantity']; ?></td>

<td><?php echo $subtotal; ?></td>

<td>

<form method="post" action="remove_from_cart.php">

<input type="hidden" name="cart_id" value="<?php echo $cart_item['id']; ?>">

<input type="submit" name="remove_from_cart" value="删除">

</form>

</td>

</tr>

<?php endforeach; ?>

<tr>

<td colspan="3">总计</td>

<td><?php echo $total; ?></td>

<td></td>

</tr>

</table>

</body>

</html>

5. 从购物车中移除商品

创建一个PHP文件来从购物车中移除商品。

<?php

require("connection.php");

if(isset($_POST['remove_from_cart'])) {

$cart_id = $_POST['cart_id'];

$stmt = $pdo->prepare("DELETE FROM cart WHERE id = :cart_id");

$stmt->bindParam(':cart_id', $cart_id);

$stmt->execute();

header("Location: cart.php");

exit();

}

?>

6. 完整示例

下面是一个完整的购物车示例,包括商品列表、购物车页面和从购物车中移除商品的功能。

- connection.php:连接数据库文件

<?php

// 数据库配置

$servername = "localhost";

$username = "root";

$password = "password";

$dbname = "shopping_cart";

// 连接数据库

try {

$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch(PDOException $e) {

echo "Connection failed: " . $e->getMessage();

}

?>

- index.php:显示商品列表和添加商品到购物车

<?php

require("connection.php");

// 获取商品列表

$stmt = $pdo->prepare("SELECT * FROM products");

$stmt->execute();

$products = $stmt->fetchAll();

// 添加商品到购物车

if(isset($_POST['add_to_cart'])) {

$product_id = $_POST['product_id'];

$quantity = $_POST['quantity'];

$stmt = $pdo->prepare("INSERT INTO cart(product_id, quantity) VALUES(:product_id, :quantity)");

$stmt->bindParam(':product_id', $product_id);

$stmt->bindParam(':quantity', $quantity);

$stmt->execute();

header("Location: index.php");

exit();

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>购物车</title>

</head>

<body>

<h1>商品列表</h1>

<table>

<tr>

<th>商品名称</th>

<th>价格</th>

<th>图片</th>

<th>操作</th>

</tr>

<?php foreach($products as $product): ?>

<tr>

<td><?php echo $product['name']; ?></td>

<td><?php echo $product['price']; ?></td>

<td><img src="<?php echo $product['image']; ?>" alt="<?php echo $product['name']; ?>"></td>

<td>

<form method="post" action="">

<input type="hidden" name="product_id" value="<?php echo $product['id']; ?>">

<input type="number" name="quantity" value="1" min="1">

<input type="submit" name="add_to_cart" value="加入购物车">

</form>

</td>

</tr>

<?php endforeach; ?>

</table>

</body>

</html>

- cart.php:显示购物车中的商品列表

<?php

require("connection.php");

// 获取购物车列表

$stmt = $pdo->prepare("SELECT cart.id, products.name, products.price, cart.quantity FROM cart LEFT JOIN products ON cart.product_id = products.id");

$stmt->execute();

$cart_items = $stmt->fetchAll();

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>购物车</title>

购物车是电商网站中必不可少的功能之一。当用户在电商网站上浏览商品时,可以将自己想要购买的商品加入到购物车中,方便用户后续支付操作。下面我们来简单介绍一下如何用PHP实现购物车功能。

首先,我们需要考虑如何存储购物车中的商品信息。一般来说,有三种存储方式:

1. 存储在浏览器的Cookie中:这种方式比较简单,但是如果用户清除了浏览器Cookie或者使用不同浏览器访问网站,则无法取回之前加入的商品。

2. 存储在服务器的Session中:这种方式相对于存储在Cookie中更加安全可靠,但是当网站用户访问量较大时,会给服务器造成不小的压力。

3. 存储在数据库中:这种方式最为安全可靠,但是需要与数据库进行频繁的交互操作,性能比较低。

在这里,我们选择使用存储在服务器的Session中的方式来实现购物车功能。

接下来,我们来实现加入购物车功能。首先,我们需要在页面上显示商品列表,并为每个商品添加一个“加入购物车”的按钮。当用户点击某个商品的“加入购物车”按钮时,我们需要将商品的信息(比如商品ID、商品名称、商品价格等)存储在Session中,代码实现如下:

```php

// 开启Session

session_start();

// 获取要加入购物车的商品信息

$productId = $_POST['product_id'];

$productName = $_POST['product_name'];

$productPrice = $_POST['product_price'];

$productNum = $_POST['product_num'];

// 判断Session中是否已经有了该商品,如果有,则增加数量,否则新建一条记录

if(isset($_SESSION['cart'][$productId])) {

$_SESSION['cart'][$productId]['num'] += $productNum;

} else {

$_SESSION['cart'][$productId] = array(

'name' => $productName,

'price' => $productPrice,

'num' => $productNum

);

}

// 添加成功,页面跳转回原来商品列表页面

header('Location: product_list.php');

以上代码中,我们首先开启了Session,然后获取用户要加入购物车的商品信息,判断Session中是否已经有了该商品,如果有,则增加数量,否则新建一条记录。最后,添加成功后,页面跳转回原来的商品列表页面。

接下来,我们来实现查看购物车功能。当用户点击购物车图标,我们需要显示购物车中所有的商品信息,包括商品的名称、价格、数量等。代码实现如下:

```php

// 开启Session

session_start();

// 获取购物车中的所有商品信息

$cartGoods = isset($_SESSION['cart']) ? $_SESSION['cart'] : array();

// 循环遍历购物车所有商品,输出商品信息

foreach($cartGoods as $key => $val) {

echo '商品名称:' . $val['name'] . '<br>';

echo '商品价格:' . $val['price'] . '<br>';

echo '商品数量:' . $val['num'] . '<br>';

}

以上代码中,我们首先开启了Session,然后获取购物车中的所有商品信息,循环遍历购物车中所有商品,并输出商品信息。

最后,我们还需要实现清空购物车功能。当用户点击“清空购物车”按钮时,我们需要将购物车中的所有商品信息全部清除。代码实现如下:

```php

// 开启Session

session_start();

// 清空购物车中的所有商品信息

unset($_SESSION['cart']);

// 清空成功,页面跳转回原来的商品列表页面

header('Location: product_list.php');

以上代码中,我们首先开启了Session,然后使用unset()函数将购物车中的所有商品信息全部清除。最后,清空成功后,页面跳转回原来的商品列表页面。

综上所述,购物车功能的实现难度并不高,只需要理清购物车中商品信息的存储方式,并结合Session的使用,就可以轻松实现购物车功能。