基于php的服装商城的设计与实现
1.引言
随着互联网的普及和电子商务的快速发展,网络购物已成为人们日常生活的一部分。网络购物商城网站作为电子商务的重要平台,具有便捷性、高效性和不受时空限制等优势,越来越受到消费者的青睐。本文旨在设计和实现一个功能完善、操作简便的网络购物商城网站,以满足用户和商家的需求。
2.相关技术
PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。PHP同时支持面向对象和面向过程的开发,使用上非常灵活。
3.架构设计
1.逻辑架构: BS架构
(1)BS架构的概念:
B/S(Brower/Server,浏览器/服务器)模式又称B/S结构,是Web兴起后的一种网络结构模式。Web浏览器是客户端最主要的应用软件。 这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用; 客户机上只需要安装一个浏览器,服务器上安装SQL Server, Oracle, MySql等数据库;浏览器通过Web Server同数据库进行数据交互。
(2)B/S架构的原理:
与C/S架构只有两层不同的是,B/S架构有三层,分别为:
第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。
第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。
第三层数据层:主要是接受客户端请求后独立进行各种运算。
工作流程如下图:
1.客户端发送请求: 用户在客户端【浏览器页面】提交表单操作,向服务器发送请求,等待服务器响应;
2.服务器端处理请求: 服务器端接收并处理请求,应用服务器端通常使用服务器端技术,如JSP等,对请求进行数据处理,并产生响应,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器;
3.服务器端发送响应: 服务器端把用户请求的数据(网页文件、图片、声音等等)返回给浏览器。
4.浏览器解释执行HTML文件,呈现用户界面。
(3)B/S架构在本项目中的体现:
在本项目中,web服务器和数据库服务器都由phpstudy内置的apache和mysql来实现。浏览器发送ip地址请求,指向phpstudy的apache服务器,apache服务器接受请求,并解析HTML,CSS,javascript文件,将组合好的页面发送到浏览器,或先从mysql数据库中获取数据,再把页面发送到浏览器显示。即下图所示。
2.数据库设计:
数据库的设计包括ER图的绘制和信息表的设计。
如下图所示:
(1)UR图的绘制:
(2)信息表的设计:
共设计三个表:users,cart,products。其中users用来存放已注册的用户的信息,cart用来存放用户添加至购物车的商品信息,products用来存放网站主页的商品信息。
Users表的设计:
Products表的设计:
Cart表的设计:
4.功能的设计与实现
(1)功能设计
关于本服装购物网站,主要有以下四个功能。
1.用户可以实现注册登录功能
2.用户可以浏览商品
3.用户可以将商品添加至购物车,并对购物车中的商品进行管理,并且进行支付。
4.用户可以对自己的个人信息进行管理,维护。
5.用户可以在搜索框中进行搜索,搜索到的商品将会在新的页面展示出其基本信息。
如下图所示:
(2)关键代码
1.注册功能的实现:
Register.php
1Register.php主要负责用户注册的逻辑,主要思路是将用户在注册界面填写的用户名,密码等信息,传递到$user,$psd等参数,然后将这些参数的值通过sql语句,作为users表将插入的新数据的各个字段的值。
$sql = "INSERT INTO users (username, password,address,email,telephone) VALUES ('$user', '$psd','$address','$email','$telephone')";
1<?php
2$user = $_POST['username'];
3$psd = $_POST['password'];
4$psdrepeat = $_POST['psdrepeat'];
5$address = $_POST['address'];
6$email = $_POST['email'];
7$telephone = $_POST['telephone'];
8$conn = mysqli_connect('localhost', 'root', 'root', 'shop');
9
10$checkQuery = "SELECT username FROM users WHERE username='$user'";
11$result = $conn->query($checkQuery);
12if ($result->num_rows > 0) {
13exit('用户名已存在');
14}
15$sql = "INSERT INTO users (username, password,address,email,telephone) VALUES ('$user', '$psd','$address','$email','$telephone')";
16if ($conn->query($sql) === TRUE) {
17header("Location:../index.php");
18} else {
19echo "Error: " . $sql . "<br />" . $conn->error;
20}
21}
22?>
2.展示商品功能:
Index.php
展示商品的功能在index.php中,主要逻辑是:首先连接数据库,然后查询products表的所有内容,通过mysql函数:fetch_assoc(),将查询出的数据转化为关联数组,进而输出各个商品表中各个字段的值。
1<?php
2// 连接数据库
3$conn = new mysqli( 'localhost', 'root', 'root', 'shop' );
4// 检查连接
5if ( $conn->connect_error ) {
6die( 'Connection failed: ' . $conn->connect_error );
7}
8// 查询商品数据
9$sql = 'SELECT * FROM products';
10$result = $conn->query( $sql );
11// 关闭数据库连接
12$conn->close();
13?>
14<h1>商品列表</h1>
15<?php
16if ($result->num_rows > 0) {
17echo '<div class="product-container">';
18while ($row = $result->fetch_assoc()) {
19echo '<div class="product">';
20echo '<img src="' . $row['image_url'] . '" height="200px" alt="' . $row['name'] . '" />';
21echo '<h3>' . $row['name'] . '</h3>';
22echo '<p>价格:' . $row['price'] . '</p>';
23echo '<label for="quantity">数量:</label>';
24echo '<input type="number" id="quantity' . $row['id'] . '" min="1" value="1">';
25echo "<button onclick='addToCart(" . $row['id'] . ")'>添加到购物车</button>";
26echo '</div>';
27}
28echo '</div>';
29} else {
30echo '暂无商品';
31}
32?>
3.添加至购物车功能。
在商品展示中的,添加到购物车按钮中,有一个addtocart的函数,当点击这个按钮就会触发,如果检测到触发了这个函数,就会把商品中的id这个参数,传递给 $productId.使用XHR发送POST请求将商品的数量和productId信息,传递到add.php中
1function addToCart(productId) {
2// 获取商品数量
3var quantity = document.getElementById('quantity' + productId).value;
4// 创建一个XMLHttpRequest对象
5var xhr = new XMLHttpRequest();
6// 设置请求方法和URL
7xhr.open("POST", "add.php", true);
8// 设置请求头
9xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
10// 处理响应
11xhr.onreadystatechange = function() {
12if (xhr.readyState === XMLHttpRequest.DONE) {
13if (xhr.status === 200) {
14// 成功添加商品到购物车
15alert("成功添加商品到购物车");
16// 刷新页面或更新购物车数量等操作
17} else {
18// 请求失败,处理错误
19alert("添加商品到购物车失败:" + xhr.responseText);
20}
21}
22};
23// 发送请求,包括商品数量
24xhr.send("addToCart=1&productId=" + productId + "&quantity=" + quantity);
25}
Add.php
在add.php中,接收到index.php发送的数据,并传递给$productId和$quantity,分别代表商品号和数量。在cart表中查询是否已经存在该商品,如果已经存在,就把quantity加上$quantity.如果cart表中没有该商品,就,直接在cart表中插入该数据。
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['addToCart'])) {
$productId = $_POST['productId'];
$quantity = $_POST['quantity'];
$sql1="select * from cart where product_id = $productId";
$result1 = $conn->query($sql1);
//判断购物车中是否已存在该商品
if ($result1->num_rows > 0)
{ $updateSql = "UPDATE cart SET quantity = quantity + $quantity WHERE product_id = $productId";
}
else{$sql = "INSERT INTO cart (product_id, quantity) VALUES ($productId, $quantity)";
}
}
4.修改密码功能
修改密码的实现主要有两个文件:change1.php和change2.php
Change1.php主要负责修改密码界面的显示
1<form action="change2.php" method="post">
2<div class="container">
3<h1>修改密码</h1>
4<p><span>原始密码:</span><input type="text" name="pass" required=""></p>
5<p><span>新密码:</span><input type="text" name="password" required=""></p>
6<p><input type="submit" name="" value="修改" /></p>
7</form>
Change2.php主要负责修改密码的逻辑。
$user=$_COOKIE['username'];
$pass=$_POST['pass'];
$password=$_POST['password'];
$sql="select * from users where username='$user' and password='$pass'";
$res=mysqli_query($con,$sql);
//查询结果保存在$res对象中
//把$res转换成索引数组
$row=mysqli_fetch_array($res,MYSQLI_NUM);
// 数组不为空就显示登入成功
if(!is_null($row))
{
$sql1="update users set password='$password' where username='$user' and password='$pass'";
$res1=mysqli_query($con,$sql1);
echo "修改成功,返回登录</a>";
}
else{
echo "修改失败,返回登入</a>";
}
5.测试
(1)开发环境
(a)电脑配置:
Cpu:Intel(R) Core(TM) i5-10200H CPU @ 2.40GHz 4核
显卡:NVIDIA GeForce RTX 3050 Laptop GPU 4GB
内存:16gb
(b)软件环境:
apache版本:2.4.39
mysql版本:8.0.12
(2)贴图描述:
主界面:
登陆界面:
注册界面:
购物车界面:
修改密码界面: