首页 > 编程语言 >php购物网站结题报告

php购物网站结题报告

时间:2023-12-25 16:14:13浏览次数:24  
标签:结题 quantity 购物 购物车 商品 sql php productId

基于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架构有三层,分别为:
第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。
第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。
第三层数据层:主要是接受客户端请求后独立进行各种运算。
工作流程如下图:
image

1.客户端发送请求: 用户在客户端【浏览器页面】提交表单操作,向服务器发送请求,等待服务器响应;
2.服务器端处理请求: 服务器端接收并处理请求,应用服务器端通常使用服务器端技术,如JSP等,对请求进行数据处理,并产生响应,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器;
3.服务器端发送响应: 服务器端把用户请求的数据(网页文件、图片、声音等等)返回给浏览器。
4.浏览器解释执行HTML文件,呈现用户界面。
(3)B/S架构在本项目中的体现:
在本项目中,web服务器和数据库服务器都由phpstudy内置的apache和mysql来实现。浏览器发送ip地址请求,指向phpstudy的apache服务器,apache服务器接受请求,并解析HTML,CSS,javascript文件,将组合好的页面发送到浏览器,或先从mysql数据库中获取数据,再把页面发送到浏览器显示。即下图所示。
image

2.数据库设计:
数据库的设计包括ER图的绘制和信息表的设计。
如下图所示:
image

(1)UR图的绘制:
image

(2)信息表的设计:
共设计三个表:users,cart,products。其中users用来存放已注册的用户的信息,cart用来存放用户添加至购物车的商品信息,products用来存放网站主页的商品信息。
image
Users表的设计:
image

Products表的设计:
image

Cart表的设计:

4.功能的设计与实现
image

(1)功能设计
关于本服装购物网站,主要有以下四个功能。
1.用户可以实现注册登录功能
2.用户可以浏览商品
3.用户可以将商品添加至购物车,并对购物车中的商品进行管理,并且进行支付。
4.用户可以对自己的个人信息进行管理,维护。
5.用户可以在搜索框中进行搜索,搜索到的商品将会在新的页面展示出其基本信息。
如下图所示:
image

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

登陆界面:
image

注册界面:
image

购物车界面:
image

修改密码界面:
image

标签:结题,quantity,购物,购物车,商品,sql,php,productId
From: https://www.cnblogs.com/y0uth/p/17926277.html

相关文章

  • thinkPhp的学习笔记(二)
    7.thinkphp自动验证-->$_validatearray(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间])1.验证字段需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如ex......
  • PHP 操作符spaceship
    PHP操作符spaceshipPHP7.0及以后的版本引入了spaceship操作符(<=>,也被称为三向比较运算符或组合比较运算符),这是一个非常有用的语法糖,用于比较两个表达式的大小。这个操作符返回一个整数值,表示两个表达式之间的关系,如下所示:如果$a小于$b,spaceship操作符返回-1。如果$a等于......
  • vscode+xdebug+phpenv本地调试php代码
    php环境变量先设置环境变量,找到php目录在vscode里安装phpdebug插件点击插件按钮,搜索phpdebug,找到这里标有Xdebug的,点击安装开启Xdebug组件找到对应版本的php去配置php.in文件把这个放到php.ini的最后,如果里面有则根据情况替换即可,端口号要和下面的vscode里面的统一......
  • centos7编译安装php8
    参考推荐:https://blog.csdn.net/zzz1502/article/details/120157436 首先安装需要的依赖和第三方库#yuminstall-y--setopt=protected_multilib=falsegcGcgcc-c++makecmakeautomakeautoconfgdfilebisonpatchmlocateflexdiffutilszlibzlib-develpcrepcre-d......
  • thinkPhp的学习笔记(一)
    1.A()用于实例化其他控制器的$obj=A('Test');$obj->test1();等同于$obj=newTestController();$obj->test1();2.C()C('配置的名称')用来获取配置信息。3.R()类似于A(),不同的是R()函数在实例化控制器的时候把操作方法一起传递过去,省略了方法的调用。R('Test/test1');4.M(),D......
  • PHP医院手术麻醉系统源码,与HIS系统无缝对接,自动采集相关数据,生成医疗文书
    手术麻醉系统源码包括两大部分,手术管理和麻醉管理。1. 手术管理手术管理主要包括手术申请、手术安排、术中相关工作、手术室相关工作。手术安排:手术室安排、手术护士安排等。术中相关工作:器械清点、术中护理记录等。手术室相关工作:人员排班、工作量统计、手术时间统计等。同时,还可......
  • PHP是多进程还是多线程
    一、什么是进程进程是程序执行是的一个实例,进程能够分配给cpu和内存等资源。进程一般包括指令集和系统资源,其中指令集就是你的代码,系统资源就是指cpu、内存以及I/O等。二、什么是线程线程是进程的一个执行流,线程不能分配系统资源,它是进程的一部分,比进程更小的独立运行的单位。......
  • PHP多进程简单解释
    之前有人问我,同一个类代码就一份,那么多请求调用,数据不混在一起了吗?我觉得这可能是每一个刚开始面向对象编程的phper的疑惑,下面简单的说一说。首先,了解几个概念“多进程”和“多线程”,了解了这个以后下面理解起来就简单了。本质上你写了一个class,它什么都不是,仅仅是一堆变量和......
  • 我写的蓝宝石留言本php版v7.5
    蓝宝石留言本php版v7.5蓝宝石留言本php版采用原生php,html5,css3,jquery编写,在php5.6.40~php8.x下调试通过。本留言本使用了utf-8编码。include/config1.php是数据库连接参数的配置文件,include/config2是留言板参数的配置文件,include/config1.php可以直接编辑或者在安装时修......
  • PHP读取word文档
    1.安装1.1composer安装phpoffice/phpwordcomposerrequirephpoffice/phpword1.2后台代码 $file=$this->request->request('file');if(!$file){$this->error(__('Parameter%scannotbeempty','file......