php購物網站結題報告

来源:https://www.cnblogs.com/y0uth/archive/2023/12/25/17926277.html
-Advertisement-
Play Games

基於php的服裝商城的設計與實現 1.引言 隨著互聯網的普及和電子商務的快速發展,網路購物已成為人們日常生活的一部分。網路購物商城網站作為電子商務的重要平臺,具有便捷性、高效性和不受時空限制等優勢,越來越受到消費者的青睞。本文旨在設計和實現一個功能完善、操作簡便的網路購物商城網站,以滿足用戶和商家的 ...


基於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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 兩個視圖基類 # APIView >之前一直在用 》drf提供的最頂層的父類 》以後所有視圖類,都繼承自它 # GenericAPIView--》繼承自APIView--》封裝 1.1 繼承APIView+序列化類+Response寫介面 urls.py--子路由--app01--urls.py ...
  • Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹`TreeWidget`與`QCharts`的常用方法及靈活運用。在之前的文章中筆者介紹瞭如何使用`QCharts... ...
  • 在本文中,我們將介紹 IoC(控制反轉)和 DI(依賴註入)的概念,以及如何在 Spring 框架中實現它們。 什麼是控制反轉? 控制反轉是軟體工程中的一個原則,它將對象或程式的某些部分的控制權轉移給容器或框架。我們最常在面向對象編程的上下文中使用它。 與傳統編程相比,傳統編程中我們的自定義代碼調用 ...
  • 哈嘍大家好,我是鹹魚 我們在使用 sorted() 或 map() 函數的時候,都會看到裡面有一個 key 參數 其實這個 key 參數也存在於其他內置函數中(例如 min()、max() 等),那麼我們今天就來瞭解一下 key 參數的含義以及用途吧! 原文:https://www.thepytho ...
  • C 語言中的條件和 if...else 語句 您已經學習過 C 語言支持數學中的常見邏輯條件: 小於:a < b 小於或等於:a <= b 大於:a > b 大於或等於:a >= b 等於:a == b 不等於:a != b 您可以使用這些條件來根據不同的決策執行不同的操作。 C 語言具有以下條件語 ...
  • Spring 可能成為您的所有企業應用程式的一站式商店。但是,Spring 是模塊化的,允許您挑選適用於您的模塊,而無需引入其他模塊。下麵的部分提供了 Spring Framework 中所有可用模塊的詳細信息。Spring Framework 提供了大約20個模塊,可以根據應用程式要求使用。 核心 ...
  • Spring 是用於企業 Java 應用程式開發的最流行的應用程式開發框架。全球數百萬開發人員使用 Spring Framework 創建高性能、易於測試和可重用的代碼。Spring Framework 是一個開源的 Java 平臺。它最初由 Rod Johnson 編寫,並於 2003 年 6 月 ...
  • 前言 在日常工作和學習中,有很多地方都需要發送HTTP請求,本文以Java為例,總結髮送HTTP請求的多種方式 HTTP請求實現過程: GET 創建遠程連接 設置連接方式(get、post、put…) 設置連接超時時間 設置響應讀取時間 發起請求 獲取請求數據 關閉連接 POST 創建遠程連接 設置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...