php购物网站结题报告

基于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)贴图描述:

主界面:

登陆界面:

注册界面:

购物车界面:

修改密码界面:

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5