PHP購物網站(含購物車、全部原始碼、資料庫設計表及其原始碼)
這是我在研究生期間,老師要求做的一個類似原始淘寶網的購物網站,
因為不會PHP,為了寫這個作業而新學的。
做這個網站用了兩週時間,在此把這個小專案做一個總結。
這個小專案做的時間非常趕,一共兩週,實際有效時間只有10天,中間還在忙其他的事。所以有很多不足之處。
有些程式碼原本可以寫的更精簡,合併在一起。
連線資料庫和其他的一些執行sql語句的操作,可以封裝在單獨的檔案裡面呼叫,這裡也都比較簡單的哪裡用到就在哪裡處理了。
資料庫的連結方式用了兩種,沒有統一。
還是有很多值得改進的地方。
功能:
DONE. 使用者許可權管理
。包括管理員和普通使用者。管理員有所有許可權,包括更新網站狀態
登入的其他值為使用者名稱和密碼,使用者名稱和密碼正確,跳轉到下一頁。
ADMIN具有新增,刪除,更新等許可權。使用者只能檢視手機,只能新增到購物車中的手機等。
DONE.新使用者
:此模組適用於沒有帳戶的使用者。這裡使用者可以建立一個帳戶來登入。賬戶的建立是通過填寫登錄檔單和使用者的詳細資訊,如姓名,電話,電子郵件等來完成的。
DONE.產品管理和展示
:該模組展示手機產品資訊,如產品編號,專案,名稱,類別,產品影象,說明,功能和產品限制等。所有這些都將輸入到資料庫,因此可以在網站上找到。
DONE.搜尋
:該模組可幫助客戶根據自己的預算或興趣來放鬆搜尋。搜尋可以在不同的類別上完成,如品牌,型號名稱,型號,顏色或價格等。
DONE:交易
:在此模組中,購物車的管理已完成。此模組購物者可以選擇任意數量的物品(手機,配件)並將它們新增到購物車,在從購物車購買物品後,所有要購買的物品都可以再次檢視。如果他以後不喜歡,購物者也可以從購物車中取出。購物者還可以逐一檢查購物車中儲存的產品。由於產品從購物車中檢出,總價格將相加。
DONE:裝運
:在這個模組中,購物者可以選擇合適的裝運選項。購物者可以使用不同服務提供商提供的各種運送選項。
DONE:付款
:該模組描述了客戶完成的付款。購物者可以選擇不同的支付方式,並根據所選的支付方式的要求提供機密的支付資訊。付款資訊還可能包括購買型號,數量和供應商名稱等資訊。
DONE:報告
:在此模組中,將生成所有報告。無論何時出售物品或客戶訂購產品,都應立即通過電子郵件向其供應商傳送警報,以便他可以儘快裝運該物品。該模組有3個子模組;股票報告,訂單報告和交付報告。
- 股票報告將生成可用產品數量和產品狀態的報告。
- 訂單報告將列出訂購的產品清單以及購買該產品的客戶詳細資訊,這些資訊未送達。
- 交付報告將生成已售出產品清單及其交付狀態。
1.資料庫表設計
下面是對資料庫設計的一個說明,交作業用的。
*Design ideas of relational schema:
Since the website will not be too complex, so I just design basic fields of the whole website logic. As for the tables “order_info” and “orderDetailRecord_info”, I separate order information into two tables to solve the problem that one order may have two types of products. Plus, the “p_image_url” field in the table “product_info”, will be used for analyzing url of images of products. Plus plus: actually an order may conclude many products, every products may choose different delivery method, but here we simplify it and assume that an order only have one delivery method.*
另外需要說明的是,
delivery_info
表和payment_info
表中分別加入了一個random
欄位,是因為在寫php處理的過程中,產生了相應的需要,具體處理請看程式碼。
下面是具體的表名和欄位:
附上剛開始建立資料表的mysql程式碼,後期自此基礎上有一些修改
`admin_info(admin_id,admin_name,admin_pwd)`
CREATE TABLE IF NOT EXISTS admin_info(
admin_id int(10) NOT NULL AUTO_INCREMENT,
admin_name varchar(50) NOT NULL,
admin_pwd varchar(50) NOT NULL,
PRIMARY KEY(admin_id)
);
`user_info(u_id,u_name,u_pwd,u_phone,u_email)`
CREATE TABLE IF NOT EXISTS user_info(
u_id int(10) NOT NULL AUTO_INCREMENT,
u_name varchar(50) NOT NULL,
u_pwd varchar(50) NOT NULL,
u_phone int(50) NOT NULL,
u_email varchar(50) NOT NULL,
PRIMARY KEY(u_id)
);
`product_info(p_id, p_name,p_brand, p_type,p_price,p_inventory,p_descr,p_color,p_image_url)`
CREATE TABLE IF NOT EXISTS product_info(
p_id int(10) NOT NULL AUTO_INCREMENT,
p_name varchar(50) NOT NULL,
p_brand varchar(50) NOT NULL,
p_type int(50) NOT NULL,
p_price varchar(50) NOT NULL,
p_inventory varchar(50) NOT NULL,
p_descr varchar(100) NOT NULL,
p_color varchar(50) NOT NULL,
p_image_url varchar(200) NOT NULL,
PRIMARY KEY(p_id)
);
`payment_info(pay_id,pay_user,receive_user,pay_account,receive_account,pay_status)`
CREATE TABLE IF NOT EXISTS payment_info(
pay_id int(10) NOT NULL AUTO_INCREMENT,
pay_user varchar(50) NOT NULL,
receive_user varchar(50) NOT NULL,
pay_account int(50) NOT NULL,
receive_account int(50) NOT NULL,
pay_status boolean NOT NULL,
PRIMARY KEY(pay_id)
);
`delivery_info(d_id,d_company,d_init_add,d_trgt_add,d_price)`
CREATE TABLE IF NOT EXISTS delivery_info(
d_id int(10) NOT NULL AUTO_INCREMENT,
d_company varchar(50) NOT NULL,
d_init_add varchar(50) NOT NULL,
d_trgt_add varchar(50) NOT NULL,
d_price varchar(50) NOT NULL,
PRIMARY KEY(d_id)
);
`order_info(o_id,u_id,d_id,o_date,pay_id)`
CREATE TABLE IF NOT EXISTS order_info(
o_id int(10) NOT NULL AUTO_INCREMENT,
u_id int NOT NULL,
d_id int NOT NULL,
o_date int(50) NOT NULL,
pay_id int NOT NULL,
PRIMARY KEY(o_id),
FOREIGN KEY (u_id) REFERENCES user_info(u_id),
FOREIGN KEY (d_id) REFERENCES delivery_info(d_id),
FOREIGN KEY (pay_id) REFERENCES payment_info(pay_id)
);
`orderDetailRecord_info(r_id,o_id,p_id,p_num)`
CREATE TABLE IF NOT EXISTS orderDetailRecord_info(
r_id int(10) NOT NULL AUTO_INCREMENT,
o_id int NOT NULL,
p_id int NOT NULL,
p_num int(50) NOT NULL,
PRIMARY KEY(r_id),
FOREIGN KEY (o_id) REFERENCES order_info(o_id),
FOREIGN KEY (p_id) REFERENCES product_info(p_id)
);
`stock_info(s_id,p_id,p_inventory)`
CREATE TABLE IF NOT EXISTS stock_info(
s_id int(10) NOT NULL AUTO_INCREMENT,
p_id int(10),
p_inventory int(50),
PRIMARY KEY(s_id),
FOREIGN KEY(p_id) REFERENCES product_info(p_id)
);
下面是以上功能的程式碼以及一些相關的解釋:
最簡單的主介面:
index.html
//只放了一個註冊一個登入的連結
<html>
<head>
<meta charset="utf-8">
<title>Phones on saling</title>
</head>
<h1>Phones on saling!</h1>
<a href="chooseCharactor.html" target="_blank">Sign in the website.</a><br><br>
<a href="login.php" target="_blank">Login into the website.</a>
</html>
1.註冊功能:
首先要選擇角色型別:(這個功能是剛開始練習做的,其實應該把角色選擇和註冊功能都放在一個頁面裡,現在分為了三個,分別是選擇,管理員註冊和使用者註冊,比較麻煩。後來時間緊,就沒有再改了,實際可以合併為一個。)
chooseCharacter.html
<html>
<head>
<meta charset="utf-8">
<title>Sign in to phone website</title>
</head>
<h1>Choose your charactor</h1>
Please choose which kind of charactor you want to sign in?
<form action="chooseCharactor.php" method="get">
<select name="q">
<option value="">Choose charactor</option>
<option value="admin">Admin</option>
<option value="user">User</option>
</select><br>
<input type="submit" value="Submit">
</form>
</html>
chooseCharacter.php
//選擇相應的角色後,會跳轉到不同角色的註冊介面
<!DOCTYPE html>
<html>
<head>
<title>Choose charactor</title>
</head>
<body>
<?php
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q == "") {
echo "You must choose a charactor!";
}else if($q != ""){
if($q =='admin') {
header('Location: adminSign.html');
} else if($q =='user') {
header('Location: sign.html');
}
}
?>
</body>
</html>
1)管理員註冊:
adminSign.html
//管理員註冊的介面。管理員註冊需要拿到內部的Invitation number(邀請碼),註冊方可進行。如果已經註冊,可以點選下方的login連結,直接登入,將跳轉到login.php介面。
<html>
<head>
<meta charset="utf-8">
<title>Sign in to phone website as admin user</title>
</head>
<h1>Sign in</h1>
<form action="adminSign.php" method="post">
User name:<input type="text" name="username"><br>
User password:<input type="password" name="psw"><br>
Confirm user password:<input type="password" name="cofpsw"><br>
Invitation number:<input type="text" name="invtnum"><br>
<input type="submit" name="submit">
</form>
If you have already signed in, please click here to login.<br>
<a href="login.html" target="_blank">Login into the website.</a>
</html>
adminSign.php
//處理管理員註冊請求
<!DOCTYPE html>
<html>
<head>
<title>Sign in the phone web as admin user, success!</title>
</head>
<body>
<?php
include 'executeSql.php';
$userName = $_POST["username"];
$pwd = $_POST["psw"];
$cofPsw = $_POST["cofpsw"];
$invtNum = $_POST["invtnum"];
if($userName == ""||$pwd == ""||$cofPsw == ""|| $invtNum == ""){
echo "None of the value can be empty!";
}else if($pwd != $cofPsw){
echo "The password entered for two time is not same!";
}else if($invtNum != "SN90IE58KP"){
echo "The invitation number is wrong!";
}else{
echo "All values are right, your have sucessfully sign in as admin user!";
$sql = "INSERT INTO admin_info (admin_name,admin_pwd) VALUES('" . $userName . "','" . $pwd . "');";
//$sql = "INSERT INTO admin_info (admin_name,admin_pwd) VALUES('superadmin','admin123');";
//echo $sql;
executeSql($sql);
}
?>
</body>
</html>
2)使用者註冊
sign.html
//使用者註冊介面
<html>
<head>
<meta charset="utf-8">
<title>Sign in to phone website</title>
</head>
<h1>Sign in</h1>
<form action="sign.php" method="post">
User name:<input type="text" name="username"><br>
User password:<input type="password" name="psw"><br>
Confirm user password:<input type="password" name="cofpsw"><br>
Phone:<input type="text" name="phone"><br>
Email:<input type="email" name="email"><br>
<input type="submit" name="submit">
</form>
</html>
sign.php
//處理使用者註冊請求,收集基本資訊並加入到資料庫。如果存在資料缺失,則不能註冊,對兩次輸入的密碼做了基本的檢測,並檢測郵箱格式的正確性。
//註冊後會跳轉到login.php介面,但是因為普通使用者註冊後,會自動為當前使用者登入,並在當前的cookie中儲存使用者登入的狀態,因此不需要再登入一次,可以直接由網頁連結跳轉到手機購買介面。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sign in sucess!</title>
<style>
.button {
background-color: #4CAF50;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
}
.table{
border-style:solid;
border-color:#98bf21;
align-self: center;
align-items: center;
}
/*.divcss5-right{width:320px; height:120px;border:1px solid #F00;float:right} */
.divcss5-right{float:right;}
/* css註釋:對divcss5-right設定float:right即可讓物件靠右浮動 */
</style>
</head>
<body>
<?php
function executeSql($sql){
$flag = false;
$feedback = array();
if($sql == ""){
echo "Error! Sql content is empty!";
}else{
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "hw";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query_result=mysqli_query($conn,$sql);//query_result is a PHP array
if($query_result){
$flag = true;
$feedback = $query_result;
//$num_rows=mysqli_num_rows($query_result);
}
return array($flag,$feedback);
}
}
$userName = $_POST["username"];
$pwd = $_POST["psw"];
$cofPsw = $_POST["cofpsw"];
$phone = $_POST["phone"];
$email = $_POST["email"];
if($userName == "" || $pwd == "" || $cofPsw == "" || $phone == "" || $email == ""){
echo "None of the value can be empty!";
}
else if($pwd != $cofPsw){
echo "The password entered for two time is not same!";
}else if ($pwd == $cofPsw){
$sql = "INSERT INTO user_info (u_name,u_pwd,u_phone,u_email) VALUES('" .$userName ."','" . $pwd ."','" . $phone . "','" . $email . "');";
$result = executeSql($sql);
if($result){
$select_sql = "SELECT u_id FROM user_info WHERE u_name = '".$userName."';";
$result = executeSql($select_sql);
if($result[0]){
setcookie('login_status',true);
while($row = mysqli_fetch_assoc($result[1])){
$u_id=$row["u_id"];
setcookie('u_id',$u_id);
}
header("location:login.php");
}
}
}
?>
</body>
</html>
2.登入功能:
login.php
//使用者登入的介面,可以選擇管理員使用者登入和普通使用者登入。
作為管理員使用者登入後,跳轉到產品管理介面。作為普通使用者登入後,跳轉到網站主頁,即手機購買介面。
<html>
<head>
<meta charset="utf-8">
<title>Login in to phone website</title>
<style>
.button {
background-color: #4CAF50;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
align-self:right;
float: left;
}
.body{font-family:Arial,Helvetica,sans-serif;font-size:20px;}
</style>
<h2>User Login</h2>
</head>
<body class = "body">
<?php
if(isset($_COOKIE['login_status'])){
echo "Login already.";
?>
<br>
<br>
<a href='showPhones.php'>Click here to buy phones.</a>
<?php
}else{
?>
<form action="process_login.php" method="post">
<select name="character">
<option value="">Choose your character</option>
<option value="admin">admin</option>
<option value="user">user</option>
</select><br>
User name:<input type="text" name="username"><br>
User password:<input type="password" name="psw"><br>
<input type="submit" class = "button" name="submit" value="Choose">
</form>
<?php
}
?>
</body>
</html>
process_login.php
處理登入請求
<!DOCTYPE html>
<html>
<body>
<?php
function executeSql($sql){
$flag = false;
$feedback = array();
if($sql == ""){
echo "Error! Sql content is empty!";
}else{
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "hw";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query_result=mysqli_query($conn,$sql);//query_result is a PHP array
if($query_result){
$flag = true;
$feedback = $query_result;
//$num_rows=mysqli_num_rows($query_result);
}
return array($flag,$feedback);
}
}
$userName = $_POST["username"];
$pwd = $_POST["psw"];
if(isset($_POST["submit"])){
$selected_Charactor = $_POST["character"];
}else{
echo "You have choose the wrong charactor!";
echo "<br>";
}
if($userName == ""||$pwd == ""){
echo "None of the value can be empty!";
echo "<br>";
}
//declare the sql var and decides the value
//$sql;
if($selected_Charactor == "admin"){
$sql = "SELECT admin_id FROM admin_info WHERE admin_name = '" . $userName . "' and admin_pwd = '". $pwd ." ' ;" ;
$result = executeSql($sql);
if ($result[0]) {
header('Location: p_manage.php');
} else {
echo "Error! Something wrong in your username or password!";
echo "<br>";
}
}else if($selected_Charactor == "user"){
$sql = "SELECT u_id FROM user_info WHERE u_name = '" . $userName ."' and u_pwd = '".$pwd."' ;" ;
$result = executeSql($sql);
if($result[0]){
setcookie('login_status',true);
while ($row = mysqli_fetch_assoc($result[1])){
$u_id=$row["u_id"];
setcookie('u_id',$u_id);
}
header('Location: showPhones.php');
}else{
echo "Error! Something wrong in your username or password!";
echo "<br>";
}
}
?>
</body>
</html>
3.手機產品管理(管理員):
1)增加新的手機:
add_product.html
//增加新的手機庫存
<html>
<head>
<title>Add new product</title>
<style>
.button {
background-color: #4CAF50;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
align-self:right;
float: right;
}
.table{
border-style:solid;
border-color:#98bf21;
align-self: center;
align-items: center;
width: "12%";
height: "20%";
}
</style>
</head>
<h1 align="center">Hello admin user, you can add a new product into database!</h1>
<body>
<form action="add_product.php" method="post">
<table align="center" class = "table" border="1">
<th>Product Name</th>
<th>Product Brand</th>
<th>Product Type</th>
<th>Product Price</th>
<th>Product Inventory</th>
<th>Product Description</th>
<th>Product Color</th>
<th>Product Url</th>
<tr>
<td><input type="text" name="name"></td>
<td><input type="text" name="brand"></td>
<td><input type="text" name="type"></td>
<td><input type="text" name="price">
相關推薦
PHP購物網站(含購物車、全部原始碼、資料庫設計表及其原始碼)
這是我在研究生期間,老師要求做的一個類似原始淘寶網的購物網站,
因為不會PHP,為了寫這個作業而新學的。
做這個網站用了兩週時間,在此把這個小專案做一個總結。
這個小專案做的時間非常趕,一共兩週,實際有效時間只有10天,中間還在忙其他的事。所以有很多不足之
Python分散式爬蟲打造搜尋引擎網站(含課件&程式碼)
未來是什麼時代?是資料時代!資料分析服務、網際網路金融,資料建模、自然語言處理、醫療病例分析……越來越多的工作會基於資料來做,而爬蟲正是快速獲取資料最重要的方式,相比其它語言,Python爬蟲更簡單、高效
----------------------課程目錄--
小型購物網站(一):專案搭建
1、搭建專案執行的環境
1)在tomcat中配置虛擬主機
在tomcat7/conf/server.xml中的引擎標籤下新建一個Host標籤:
<Engine>
<Host name="www.easymall.com" appBase="建立的資料夾
如何利用GitHub設計一個炫酷的個人網站(含代碼)
代碼 建立 一點 沒有 ima href info 個人網站 bubuko 1.在開始制作之前我們先預覽一下我的網站吧!
1.方式一:
由於是手機版的所以用手機掃下面的二維碼體驗比較好一點:
https://tom-shushu.github.io/MyWeb.git
testNG簡易教程(含安裝,註解,配置檔案,測試報告等)
一、eclipse安裝TestNG外掛
1.線上安裝
點選eclipse頂部選單欄Help-->Install New SoftWare,再點選Add按鈕,Name:testNG,Location:http://beust.com/eclipse,等幾分鐘後出現tes
asp.net控制元件全部清空、全部啟用、全部禁用方法
#region//控制元件類
public class PubliClass
{
/// <summary>
/// 清空控制元件內容
/// </summary>
p
基於圖模型的智慧推薦演算法學習筆記(含知識圖譜/圖神經網路,不止於智慧推薦)
【說在前面】本人部落格新手一枚,象牙塔的老白,職業場的小白。以下內容僅為個人見解,歡迎批評指正,不喜勿噴![握手][握手]
【再囉嗦一下】如果你對智慧推薦感興趣,歡迎先瀏覽我的另一篇隨筆:智慧推薦演算法演變及學習筆記
【最後再說一下】本文只對智慧推薦演算法中的基於圖模型的智慧推薦進行具體介紹!
一、基於知識圖
Hive Shell命令之一(資料庫和表的操作)
//資料庫的有關操作 1、如果資料庫不存在的話建立資料庫,預設資料庫default: create database if not exists test; 2、檢視hive中所包含的資料庫: show databases; 3、如果資料庫非常多,可以用正則表示式匹配篩選出需要的資料庫名。 sh
【C#】EF學習<二> DbFirst (先建立資料庫,表及其關聯關係)
工程壓縮檔案放到百度雲盤---20181019001資料夾
1. 建立表的指令碼
create table Teacher
(
TID char(12) primary key,
Tname char(6) not null
)
create table
MySQL定時任務event,儲存過程(定時刪除指定時間前90天指定表的資料)
<span style="font-family: 'Microsoft YaHei'; font-size: 14px;">MySQL定時任務event</span>
由
unity網路實戰開發(叢林戰爭)-正式開發階段(016-資料庫設計以及登入處理)
使用工具:VS2017,unity3d使用語言:c#作者:Gemini_xujian參考:siki老師-《叢林戰爭》視訊教程上一篇文章中,已經完成了遊戲場景與開始介面UI的搭建,接下來將對資料庫和登入請求響應等操作進行處理。01-設計資料庫表(使用者表和戰績表)首先,我們需要
資料庫在一對一、一對多、多對多怎麼設計表關係
開發十年,就只剩下這套架構體系了!
>>>
PHP 分類篩選 (實現購物、視訊等網站的列表篩選功能)
比如購物網站、視訊網站等,列表頁一般都有篩選功能。思路如下,僅供借鑑:
<?php
// Debug: 輸出提交的資料
var_dump($_GET);
// 要進行篩選的欄位
$fields = array('price','color','metal');
/
php通過curl擴展進行模擬登錄(含驗證碼)
程序 valid 做的 .cn ica ews fclose har user 以下為本人工作中遇到的需要做的事情,之前也沒怎麽用過curl,查了好多資料,才稍微弄明白一點;本文所有內容只是自己平日工作的記錄,僅供大家參考:<?php/*** 模擬登錄*/head
Java多線程(二) —— 線程安全、線程同步、線程間通信(含面試題集)
err 線程等待 共同點 -c java多線 能夠 空間 而不是 不一致 一、線程安全
多個線程在執行同一段代碼的時候,每次的執行結果和單線程執行的結果都是一樣的,不存在執行結果的二義性,就可以稱作是線程安全的。
講到線程安全問題,其實是指多線程環境下對共享資源的訪問可能會
網站首頁(含菜單欄)實現
range sub sea light odin charset ctype settime hide
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="
統計字符串中大寫、小寫、數字的個數(含遍歷)
小寫 logs 字符串轉換 ray png images 技術 img -1
字符串遍歷可以用字符串轉換方法中的toolCharArray();把字符串轉換為字符數組。統計字符串中大寫、小寫、數字的個數(含遍歷)
PHP 常量、PHP 變量全解析(超全局變量、變量的8種數據類型等)
ret each 回收 操作系統 js xml name static bject 單獨 常量特點
常量一旦被定義就無法更改或撤銷定義。
常量名不需要開頭的$
與變量不同,常量貫穿整個腳本是自動全局的。 作用域不影響對常量的訪問
常量值只能是字符串或數字
設置 PHP
php文件上傳原理詳解(含源碼)
輸入數據 最大值 cut 產生 har 默認值 接受 上傳文件 tle 1、文件上傳原理
將客戶端的文件上傳到服務器,再將服務器的臨時文件上傳到指定目錄
2、客戶端配置
提交表單
表單的發送方式為post
添加enctype="multipart/form-data"
selenium自動化測試資源整理(含所有版本chrome、chromedriver、firefox下載鏈接)
網址 www mod org AD down adas mozilla 下載鏈接
1. 所有版本chrome下載
是不是很難找到老版本的chrome?博主收集了幾個下載chrome老版本的網站,其中哪個下載的是原版的就不得而知了。
http://www.slimje