基于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')";
1query($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 . "
" . $conn->error;20}21}22?>

2.展示商品功能:
Index.php
展示商品的功能在index.php中,主要逻辑是:首先连接数据库,然后查询products表的所有内容,通过mysql函数:fetch_assoc(),将查询出的数据转化为关联数组,进而输出各个商品表中各个字段的值。

1connect_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

商品列表

15num_rows > 0) {17echo '
';18while ($row = $result->fetch_assoc()) {19echo '
';20echo '' . $row['name'] . '';21echo '

' . $row['name'] . '

';22echo '

价格:' . $row['price'] . '

';23echo '';24echo '';25echo "";26echo '';27}28echo '';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// 设置请求方法和URL7xhr.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主要负责修改密码界面的显示

12
3

修改密码

4

原始密码:

5

新密码:

6

7Change2.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 "修改成功,返回登录";}else{ echo "修改失败,返回登入";}

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)贴图描述:
主界面:

登陆界面:

注册界面:

购物车界面:

修改密码界面: