主頁 >  其他 > 口罩預約管理系統——系統網站實作(前端+PHP+MySQL)

口罩預約管理系統——系統網站實作(前端+PHP+MySQL)

2020-09-21 13:16:25 其他

口罩預約管理系統網站實作

一、前言

二、系統登陸邏輯及界面實作

三、用戶模塊

1、用戶預約系統界面

2、用戶查看我的訂單界面

3、用戶修改預約資訊

四、管理員模塊

1、管理員登陸界面

2、查看用戶預約訂單

3、修改/洗掉用戶資訊

五、快遞員模塊

1、快遞員登錄配送系統

2、接單

3、關單

六、系統實作總結

1、安全性

2、用戶預約時間

3、前后端與資料庫互動


口罩預約管理系統網站實作

一、前言

在上一篇《口罩預約管理系統——資料庫設計(前端+PHP+MySQL)》,基本上完成口罩預約管理系統的資料庫設計,而這個專案的目標是實作一個相對完整、功能齊全的模擬口罩預約管理系統,所以這一篇將完成接下來的作業——系統網站前端(HTML+CSS+Javascript)和后端(PHP),以及實作前后端與MySQL資料庫的互動,實作功能簡要描述如下:

  • 用戶模塊:創建賬號,登錄系統預約口罩確認提交,查看訂單狀態修改訂單預約資訊,修改個人注冊資訊,
  • 市政人員(管理員)模塊:查詢已注冊用戶資訊修改或洗掉用戶資訊,審核訂單以及分配快遞員,管理每種型別口罩,查詢庫存數量,合理分配用戶預約的口罩數量,按需求查看訂單的配送狀態,方便做資料分析,
  • 快遞員模塊:查看分配到的訂單,選擇接單配送,完成配送選擇關單按訂單狀態查看訂單,統計完成的訂單數量,

二、系統登陸邏輯及界面實作

系統登錄頁面對系統進行安全性管理,三種角色的賬號和密碼分別保存在 admin,users,deliver 表中,根據不同的登錄用戶,設計不同的權限,從而進入不同的模塊,登錄模塊流程圖 :

系統界面使用簡單的登錄頁面:

輸入框和用戶型別框以及登錄按鈕,登錄頁面后端使用 login_check.php 來處理用戶請求資訊,并回傳結果,前端、后端和資料庫之間互動,檢索登錄身份,如果有賬號記錄,則登錄成功,否則登錄失敗,
整個系統實作使用的技術包括 HTML5、CSS3、Javascript、PHP 和 MySQL 資料庫,運用并結合這些技術使系統呈現友好的操作頁面和系統功能的引導,下面將介紹各個功能頁面及關鍵代碼,

三、用戶模塊

1、用戶預約系統界面

使用到的前端元素包括輸入框、下拉框、日期選擇框、文本區域和Button按鈕,詳見代碼實作:

前端頁面代碼:

<!--user.php-->
<?php
//檢查是否存在登錄session,否則跳轉登錄界面
session_start();
require_once 'mysql_connect.php';
if ( !isset( $_SESSION[ 'user_id' ] ) ) {
	header( "Location:maskorder.php" );
	exit( '非法訪問!' );
}
error_reporting( E_ERROR );
mysqli_query( $link, "set names 'utf8'" );
$id = $_SESSION[ 'user_id' ];
$query = "select * from users where user_id='$id' ";
$result = mysqli_query( $link, $query );
$arr = mysqli_fetch_array( $result );

?>
<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>口罩預約系統</title>
	<link rel="stylesheet" href="css/person.css" type="text/css">
	<style type="text/css">
		#res_form {
			/*表的寬度以及位置*/
			width: 500px;
			position: relative;
			left: 500px;
			top: 100px;
		}
		
		#a {
			/*調整input輸入框與文字位置,顯示同一行*/
			height: 50px;
			border: 1px;
			margin: 10px;
			text-align: left;
		}
		
		#a input {
			border: 1px solid #000000;
			/*按鈕邊緣*/
			border-radius: 5px;
			float: right;
		}
		
		#a select {
			border: 5px;
			width: 200px;
			border-color: #000000;
			border-radius: 5px;
			float: right;
		}
		
		#textarea {
			float: right;
			width: 200px;
		}
		
		#bt input {
			float: left;
			margin: 10px;
			width: 50px;
			background-color: #3CF;
			border-bottom-color: #000000;
			border-radius: 5px;
			position: relative;
			top: 20px;
			left: 100px;
		}
		
		#bt input:hover {
			background-color: #F00;
			color: #FFF;
			cursor: pointer;
		}
		
		#out {
			display: block;
			position: relative;
			left: 10px;
		}
		
		img {
			position: relative;
			float: right;
		}
		
		#we {
			position: relative;
			right: 100px;
		}
		
		h1 {
			position: absolute;
			float: left top;
			left: 660px;
		}
	</style>
</head>

<body>
	<div id="res">
		<ul id="item">
			<img src="images/2.png"></img>
			<div id="out">
				<div id="we">歡迎您&nbsp;&nbsp;
					<?php
					echo $id;
					?>&nbsp;,</div>
			<!--此處未改好樣式-->
			<li><a href="login_out.php">退出登錄</a>
			</li>
			<li><a href="adm_up_user.php" target="_blank">修改密碼</a>
			</li>
			<li><a href="myorder.php">我的訂單</a>
			</li>
		</ul>
	</div>
	<h1>口罩預約系統</h1>
	<div id="res_form">
		<form action="reserveorder.php" method="post">
			<div id="a">
				姓名
				<!--placeholder="預約人姓名" placeholder="身份證號"-->
				<input type="text" name="name" value="<?php echo $arr['user_name']; ?>" readonly="readonly" required="required">
			</div>
			<div id="a">
				身份證號
				<input type="text" name="ID" value="<?php echo $arr['ID']; ?>" required readonly>
			</div>
			<div id="a">
				聯系方式
				<input type="text" name="phone" placeholder="請填寫手機號" required>
			</div>
			<div id="a">
				口罩型別
				<select name="type">
					<option selected="selected">請選擇</option>
					<option value="醫用外科口罩">醫用外科口罩</option>
					<option value="N95口罩">N95口罩</option>
					<option value="活性碳口罩">活性碳口罩</option>
				</select>


			</div>
			<div id="a">
				預約個數
				<input type="number" name="num" placeholder="請填寫數量(不超過20個)" min="1" max="20" required>
			</div>
			<div id="a">
				期望到貨日期
				<input type="date" name="date" placeholder="" required>
			</div>
			<div id="a">
				詳細地址
				<textarea id="textarea" name="address" cols="30" rows="4" placeholder="請填寫配送詳細地址" required></textarea>
				<!--多行文本框-->
			</div>
			<div id="bt">
				<input type="submit" value="確定">
				<input type="reset" value="重置">
			</div>
		</form>
	</div>
	</div>
</body>
</html>

可見HTML頭部加入了session機制,防止未登錄造成非法訪問,然后從資料庫中查詢表記錄,匹配用戶登陸資訊,

后端代碼實作:

reserveorder.php 對用戶提交的表單進行處理,用戶 3 天之內只能預約一次,否則系統會將判定結果告訴用戶,通過獲取當前時間戳進行比較實作,這個功能看似簡單,在具體實作的時候遇到一些小問題,比如從資料庫的表中查詢獲取時間的資料型別與當前獲取的時間如何進行比較,所以需要進行時間格式的設定,具體見代碼部分:

//reserveorder.php
<?php
session_start();
require_once 'mysql_connect.php';
$name = $_POST[ 'name' ];
$userid = $_SESSION[ 'user_id' ];
$phone = $_POST[ 'phone' ];
$ID = $_POST[ 'ID' ];
$type = $_POST[ 'type' ];
$num = $_POST[ 'num' ];
$date = $_POST[ 'date' ];
$address = $_POST[ 'address' ];

/*reserve表*/
$query = "select * from reserve where user_id='$userid'";
$result = mysqli_query( $link, $query )or die( "打開資料庫失敗:" . mysqli_error() );
$arr = mysqli_fetch_array( $result );
$num_row = mysqli_num_rows( $result );

//獲取當前時間
date_default_timezone_set( 'prc' ); //設定時區
$check_date = date( "Y-m-d H:i:s", strtotime( '-3 day' ) ); //獲取當前時間的3天前
$date_db = $arr[ 're_date' ];

if ( $check_date < $date_db ) {
	echo "<script language='javascript'>";
	echo "alert('預約失敗,用戶3天內已預約!');";
	echo "window.location.href='user.php';";
	echo "</script>";
}

else {

	/*訂單表*/
	$q = "select * from info"; // where user_id='$userid'";
	$r = mysqli_query( $link, $q );
	$arrary = mysqli_fetch_array( $r );
	$row_num = mysqli_num_rows( $r );
	$order_id = 100001 + $row_num;
	$statue = "已預約";


	$insert_order = "insert into info values('" . $order_id . "','" . $userid . "','" . $name . "','" . $type . "','0','" . $phone . "','" . $address . "','" . $statue . "',now()" . ")";

	$result = mysqli_query( $link, $insert_order )or die( "訂單生成插入記錄失敗:" . mysqli_error() );

	$query = "insert into reserve(user_id,phone,ID,mask_type,r_num,ex_date,address,re_date) value('" . $userid . "','" . $phone . "','" . $ID . "','" . $type . "','" . $num . "','" . $date . "','" . $address . "',now()" . ")";

	$result = mysqli_query( $link, $query )or die( "預約記錄失敗:" . mysqli_error() );


	echo "<script language='javascript'>";
	echo "alert('預約成功!');";
	echo "window.location.href='myorder.php';";
	echo "</script>";
}
mysqli_free_result( $result );
mysqli_close( $link );
?>

PHP后端主要的處理任務就是查詢資料表資料,對表進行插入、更新和洗掉操作,以及實作簡單的JS彈窗功能,

功能展示:

2、用戶查看我的訂單界面

由上一步預約成功之后會直接跳轉我的訂單界面,如下:

這部分前端實作簡單,只需一個頁面處理,前后端結合,將查詢記錄回傳前端表單即可,

<!--myorder.php-->
<?php
session_start();
require_once 'mysql_connect.php';
if ( !$_SESSION[ 'user_id' ] ) {
	header( "Location:maskorder.php" );
	exit( '非法訪問!' );
}
error_reporting( E_ERROR );

?>
<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>我的訂單</title>
</head>
<link rel="stylesheet" type="text/css" href="css/person.css">
<style type="text/css">
	.table{
		position: relative;
		left:100px;
		width: 1200px;
	}
	a{
		text-decoration: none;
	}
	#bt{
		border: 1px solid #000000;
		border-bottom-color: #000000;
		border-radius: 5px;
	}
</style>

<body>
	<h1 align="center">我的訂單</h1>
	<div>
		<form action="myorder.php" method="post" id="order">
			<table class="table" border="1">
				<thead>
					<tr>
						<th>訂單號</th>
						<th>預約人姓名</th>
						<th>口罩型別</th>
						<th>分配數量</th>
						<th>預約數量</th>
						<th>電話</th>
						<th>地址</th>
						<th>訂單狀態</th>
						<th>預約日期</th>
						<th>期望到貨日期</th>
						<th>修改</th>
					</tr>
				</thead>
				<tbody>
					<?php
						$userid = $_SESSION[ 'user_id' ];
						/*訂單表、預約表連接查詢*/
						$query = "select * from info,reserve where info.user_id='$userid' and info.user_id=reserve.user_id and info.re_date=reserve.re_date";
						$result = mysqli_query( $link, $query );
					
					while ($arr = mysqli_fetch_array( $result )) {
						echo "<tr>";
						echo "<td>" . $arr[ 'order_id' ] . "</td>";
						echo "<td>" . $arr[ 'user_name' ] . "</td>";
						echo "<td>" . $arr[ 'mask_type' ] . "</td>";
						echo "<td>" . $arr['allocate_num'] ."</td>";
						echo "<td>" . $arr['r_num'] ."</td>";
						echo "<td>" . $arr[ 'phone' ] . "</td>";
						echo "<td>" . $arr[ 'address' ] . "</td>";
						echo "<td>" . $arr['statue'] ."</td>";
						echo "<td>" . $arr['re_date'] ."</td>";
						echo "<td>" . $arr['ex_date'] ."</td>";
						echo "<td><a href='user_update.php?order_id=".$arr['order_id']."'>修改</a></td>";
						echo "</tr>";
					}
					?>
				</tbody>
			</table>
			<button value="回傳" id="bt"><a href="user.php">回傳</a></button>
		</form>
	</div>
</body>
</html>

3、用戶修改預約資訊

這部分繼承預約頁面的功能,稍微進行修改,實作功能主要是:類似網上購物,下單后只能修改手機號和識訓地址而其他資訊設定為只讀狀態,

代碼實作:

<!--user_update.php-->
<?php
//檢查是否存在登錄session,否則跳轉登錄界面
session_start();
require_once 'mysql_connect.php';
if ( !isset( $_SESSION[ 'user_id' ] ) ) {
	header( "Location:maskorder.php" );
	exit( '非法訪問!' );
}
error_reporting( E_ERROR );
mysqli_query( $link, "set names 'utf8'" );

$orderid=$_GET['order_id'];
//已分配的訂單用戶無法再修改
 
$id = $_SESSION[ 'user_id' ];
$order_status =mysqli_query($link,"select statue from info where user_id='$id' and order_id='$orderid'");
$status = mysqli_fetch_array($order_status);
if($status['statue']!='已預約'){
	echo "<script language='javascript'>";
	echo "alert('訂單已受理,無法修改!');";
	echo "window.location.href='myorder.php';";
	echo "</script>";
}
//如果用戶預約了多個訂單,通過自然連接,選擇當前指定的訂單號
$query = "select * from (users natural join reserve)natural join info where users.user_id='$id' and users.user_id=reserve.user_id and reserve.user_id=info.user_id  and info.order_id='$orderid'";

$result = mysqli_query( $link, $query );
$arr = mysqli_fetch_array( $result );
?>
<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>修改訂單資訊</title>
	<link rel="stylesheet" href="css/person.css" type="text/css">
	<style type="text/css">
		#res_form {
			/*表的寬度以及位置*/
			width: 500px;
			position: relative;
			left: 500px;
			top:100px;
		}
		
		#a {
			/*調整input輸入框與文字位置,顯示同一行*/
			height: 50px;
			border: 1px;
			margin: 10px;
			text-align: left;
		}
		
		#a input {
			border: 1px solid #000000;
			border-radius: 5px;
			float: right;
		}
		
		#a select {
			border: 5px;
			width: 200px;
			border-color: #000000;
			border-radius: 5px;
			float: right;
		}
		/*form input{
		text-align: left;
		margin: 10px;
	}*/
		
		#textarea {
			float: right;
			width: 200px;
		}
		
		#bt input {
			float: left;
			margin: 10px;
			width: 50px;
			background-color: #3CF;
			border-bottom-color: #000000;
			border-radius: 5px;
			position: relative;
			top: 20px;
			left: 100px;
		}
		
		#bt input:hover {
			background-color: #F00;
			color: #FFF;
			cursor: pointer;
		}
		#out{
			display: block;
			position: relative;
			left:10px;
		}
		img{
			position: relative;
			float: right;
		}
		#we{
			position: relative;
			right: 100px;
		}
		h1{
			position: absolute;
			float: left top;
			left:660px;
		}
	</style>
</head>

<body>
	<div id="res">
			<ul id="item">
				<img src="images/2.png"></img>
				<div id="out">
					<div id="we">歡迎您&nbsp;&nbsp;<?php
						echo $id;
					?>&nbsp;,</div>
				
				<li><a href="login_out.php">退出登錄</a>
				</li>
				<li><a href="adm_up_user.php">修改密碼</a>
				</li>
				<li><a href="myorder.php">我的訂單</a>
				</li>
			</ul>
				</div>
		<h1>修改訂單資訊</h1>
		<div id="res_form">
			<form action="update_order.php" method="post">
				<div id="a">
					姓名
					<!--placeholder="預約人姓名" placeholder="身份證號"-->
					<input type="text" name="name" value="<?php echo $arr['user_name']; ?>" readonly="readonly" required="required">
				</div>
				<div id="a">
					身份證號
					<input type="text" name="ID" value="<?php echo $arr['ID']; ?>" required readonly>
				</div>
				<div id="a">
					聯系方式
					<input type="text" name="phone" placeholder="修改手機號" required>
				</div>
				<div id="a">
					口罩型別
					<input type="text" name="mask" value="<?php echo $arr['mask_type']; ?>" required readonly>
				</div>
				<div id="a">
					預約個數
					<input type="number" name="num" value="<?php echo $arr['r_num']; ?>" min="1" max="20" required readonly>
				</div>
				<div id="a">
					期望到貨日期
					<input type="date" name="date" value="<?php echo $arr['ex_date']; ?>" required readonly>
				</div>
				<div id="a">
					詳細地址
					<textarea id="textarea" name="address" cols="30" rows="4" placeholder="修改配送地址" required></textarea>
					<!--多行文本框-->
				</div>
				<div id="bt">
					<input type="submit" value="確定">
					<input type="reset" value="重置">
				</div>
			</form>
		</div>
	</div>
</body>
</html>

四、管理員模塊

系統實作基本功能,對于頁面布局未設計得很精美,所以接下來的管理員界面就是這樣 V●?●V

首頁包括修改和洗掉用戶的功能,

1、管理員登陸界面

這里展示后端處理,前端部分比較容易實作,這里展示一個比較特別的功能,運用SQL語言實作模糊查詢,演示如下:

<!--admin.php-->
<?php
//檢查是否存在登錄session,否則跳轉登錄界面
session_start();
require_once 'mysql_connect.php';
if ( !isset( $_SESSION[ 'work_id' ] ) ) {
	header( "Location:maskorder.php" );
	exit( '非法訪問!' );
}
error_reporting( E_ERROR );
mysqli_query( $link, "set names 'utf8'" );
?>
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<!--link type="text/css" href="css/main.css" rel="stylesheet"-->
	<title>管理員</title>
	<link type="text/css" href="css/person.css" rel="stylesheet">
	<style type="text/css">
		#store {
			float: left;
			position: absolute;
			left: 700px;
			top: -200px;
		}
		
		.login1 {
			position: relative;
			top: 100px;
		}
	</style>
</head>

<body>
	<div id="page">
		<div id="out">

			<ul id="item">
				<li><a href="adm_order.php">審核訂單</a>
				</li>
				<li><a href="login_out.php">退出登錄</a>
				</li>
			</ul>
		</div>
		<h1 align="center">管理員登錄界面</h1>
		<div class="login1">
			<form action="admin.php" method="post">
				<select name="item">
					<option selected>請選擇查詢條件</option>
					<option value="user_id">賬號</option>
					<option value="user_name">姓名</option>
					<option value="ID">身份證號</option>
				</select>
				<input type="text" name="val">
				<button type="submit" class="btn btn-info">查詢</button>
				<table class="table" border="1">
					<thead>
						<tr>
							<th>賬號</th>
							<th>密碼</th>
							<th>姓名</th>
							<th>身份證號</th>
							<th>注冊時間</th>
							<th>修改</th>
						</tr>
					</thead>
					<tbody>
						<?php
						$item = $_POST[ 'item' ];
						$val = $_POST[ 'val' ];

						if ( !$val ) {
							$sql = "select * from users order by date desc";
						} else {
							$sql = "select * from users where $item like '%$val%' order by date desc";
						}
						mysqli_query( $link, "set names 'utf8'" );
						$res = mysqli_query( $link, $sql );
						while ( $arr = mysqli_fetch_array( $res ) ) {
							echo "<tr>";
							echo "<td>" . $arr[ 'user_id' ] . "</td>";
							echo "<td>" . $arr[ 'pwd' ] . "</td>";
							echo "<td>" . $arr[ 'user_name' ] . "</td>";
							echo "<td>" . $arr[ 'ID' ] . "</td>";
							echo "<td>" . $arr[ 'date' ] . "</td>";
							echo "<td><a href='adm_up_user.php?user_id=" . $arr[ 'user_id' ] . "'>修改</a>/<a href='admin.php?user_id=" . $arr[ 'user_id' ] . "'>洗掉</a></td>";
							echo "</tr>";
						}

						?>
					</tbody>
				</table>
			</form>
			<div id="store">
				<h2 align="center">口罩資訊表</h2>
				<table border="1">
					<tr>
						<th>口罩型別</th>
						<th>倉庫</th>
						<th>剩余數量</th>
						<th>單位價格</th>
					</tr>
					<?php
					$mask = mysqli_query( $link, "select * from mask" );

					while ( $maskarr = mysqli_fetch_array( $mask ) ) {
						echo "<tr>";
						echo "<td>" . $maskarr[ 'mask_type' ] . "</td>";
						echo "<td>" . $maskarr[ 'store' ] . "</td>";
						echo "<td>" . $maskarr[ 'remain_num' ] . "</td>";
						echo "<td>" . $maskarr[ 'price' ] . "</td>";
						echo "</tr>";
					}
					?>
				</table>
			</div>
			<?php
			$delete = $_GET[ 'user_id' ];
			mysqli_query( $link, "delete from users where user_id='$delete'" )or die( "洗掉失敗" );
			?>

		</div>
	</div>
</body>
</html>

2、查看用戶預約訂單

細心的朋友可以看到管理員界面右上角有審核訂單的按鈕,這里就是查看用戶預約訂單的入口,進去后看到是這樣的,

后端實作從資料庫查詢資料回傳前端,另外,注意重要的一點,管理員只能審核已預約的訂單,防止誤操作多次審核訂單,對之進行分配,所以后端需要做一點限制以及錯誤操作提醒,

后端實作具體代碼:

<?php
//檢查是否存在登錄session,否則跳轉登錄界面
session_start();
require_once 'mysql_connect.php';
if ( !isset( $_SESSION[ 'work_id' ] ) ) {
	header( "Location:maskorder.php" );
	exit( '非法訪問!' );
}
error_reporting( E_ERROR );
mysqli_query( $link, "set names 'utf8'" );
$id = $_SESSION[ 'work_id' ];
$order_id = $_GET['order_id'];

//檢查訂單是否為預約狀態
$ch_re =mysqli_query($link,"select * from info where order_id='$order_id'");
$ch_arr= mysqli_fetch_array($ch_re);
if($ch_arr['statue']!='已預約'){
	echo "<script language='javascript'>";
	echo "alert('該訂單已經審核過!');";
	echo "window.location.href='adm_order.php';";
	echo "</script>";
}
//如果用戶預約了多個訂單,通過自然連接,選擇當前指定的訂單號以及用戶資訊進行處理
$query = "select * from (users natural join reserve)natural join info where users.user_id=reserve.user_id and reserve.user_id=info.user_id  and info.order_id='$order_id'";

$result = mysqli_query( $link, $query ) or die("出錯啦!");
$arr = mysqli_fetch_array( $result );
$address = $arr['address'];

$de = "select * from delivers";
$de_re=mysqli_query($link,$de);

?>

合法的審核訂單則進入界面如下,管理員可操作訂單資訊只包括分配口罩數量、分配快遞員,其他為只讀狀態,這樣保證用戶預約資訊的正確性,防止管理員修改用戶資訊,

3、修改/洗掉用戶資訊

<?php
session_start();
require_once 'mysql_connect.php';
if (isset($_SESSION['work_id'])) {
    $id = $_GET['user_id'];
	$useinfo=mysqli_query($link,"select * from users where user_id='$id'");
	$userarr = mysqli_fetch_array($useinfo);
	error_reporting(E_ERROR);
}
elseif(isset($_SESSION['user_id'])){
	$id = $_SESSION['user_id'];
	$useinfo=mysqli_query($link,"select * from users where user_id='$id'");
	$userarr = mysqli_fetch_array($useinfo);
	error_reporting(E_ERROR);
}
else{
	header("Location:maskorder.php");
    exit('非法訪問!');
}

?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="css/main.css">
<title>修改用戶資訊</title>
<body>
<div class="main">
    <h2 align="center">修改用戶資訊</h2>
     <div id="page">
       <div class="login1">
		<form action="adm_up_user_sql.php" id="form1" method="post">
			<input type="text" name="name" class="name" value="<?php echo $userarr['user_id'];?>" required>
			<input type="text" name="username" class="username" value="<?php echo $userarr['user_name'];?>" required>
			<input type="text" name="ID" class="ID" value="<?php echo $userarr['ID'];?>" required>
			<input type="password" name="password" class="password" placeholder="修改密碼" required>
			<div class="clear"></div>
			<input type="submit" value="修改" >
		</form>
       </div>
     </div>
</div>
</body>
</html>

五、快遞員模塊

1、快遞員登錄配送系統

快遞員可以根據訂單狀態查詢自己的訂單

使用視圖從訂單表中提取部分資訊滿足配送要求,保證用戶資訊安全,前端頁面迭代之前,方法類似,

頁面表單處理,使用之前建立的視圖:

					<?php
					$search=$_POST['item'];
					if(!$search){
						$query = "select * from deli_order,allocate where deli_order.order_id=allocate.order_id and deliver_id='$id'";
					}
					/*訂單視圖、接關單表連接查詢,只能看到分配到當前快遞員的訂單*/
					else{
						$query = "select * from deli_order,allocate where deli_order.order_id=allocate.order_id and deliver_id='$id' and deli_order.statue='$search'";
					}
						
					$result = mysqli_query( $link, $query );

					while ( $arr = mysqli_fetch_array( $result ) ) {
						
					//快遞員查看訂單接關單時間
						$q_take="select * from take where order_id='".$arr['order_id'] ."'";
						$r_take=mysqli_query($link,$q_take);
						$arr_take=mysqli_fetch_array($r_take);
						echo "<tr>";
						echo "<td>" . $arr[ 'order_id' ] . "</td>";
						echo "<td>" . $arr[ 'mask_type' ] . "</td>";
						echo "<td>" . $arr[ 'allocate_num' ] . "</td>";
						echo "<td>" . $arr[ 'phone' ] . "</td>";
						echo "<td>" . $arr[ 'address' ] . "</td>";
						echo "<td><font color='red'>" . $arr[ 'statue' ] . "</font></td>";
						echo "<td>" . $arr[ 're_date' ] . "</td>";
						echo "<td>" . $arr_take[ 'take_date' ] . "</td>";
						echo "<td>" . $arr_take[ 'finish_date' ] . "</td>";
						echo "<td><a href='de_jie.php?order_id=".$arr['order_id']."'>接單</a>/<a href='de_guan.php?order_id=".$arr['order_id']."'>關單</a></td>";
						echo "</tr>";
						
					}
					?>

2、接單

快遞員只能接收已分配狀態的訂單,在代碼中體現,使用判斷陳述句判斷所選訂單的狀態,并回傳相應的提示,

<?php
session_start();
require_once('mysql_connect.php');
if(!$_SESSION['deliver_id']){
	header("Location:maskorder.php");
	exit("非法訪問!");
}
error_reporting(E_ERROR);
$deliverid=$_SESSION['deliver_id'];
$orderid=$_GET['order_id'];
//查詢快遞員姓名
$de_info = mysqli_query($link,"select * from delivers");
$arr_de = mysqli_fetch_array($de_info);

//判斷是否已經接過該訂單
$jie = "select * from take where order_id='$orderid'";
$jie_re = mysqli_query($link,$jie);
$jie_row = mysqli_num_rows($jie_re);
if($jie_row){
	echo "<script language='javascript'>";
	echo "alert('已經接過此訂單,請勿重復操作!');";
	echo "window.location.href='deliver.php';";
	echo "</script>";	
}

else{
	
	//將配送員資訊插入接關單表
	$in_take = "insert into take values('".$deliverid."','".$orderid."','".$arr_de['deliver_name']."',now(),null)";
	mysqli_query($link,$in_take) or die("接單失敗".mysqli_error());
	//更新訂單表中的狀態資訊,只能接已分配的訂單
	$de_or_st="update info set statue='已接單' where order_id='$orderid'";
	mysqli_query($link,$de_or_st) or die("接單失敗".mysqli_error());

	echo "<script language='javascript'>";
	echo "alert('接單成功!');";
	echo "window.location.href='deliver.php';";
	echo "</script>";
}


mysqli_free_result($de_info);
mysqli_close($link);
?>

3、關單

快遞員只能關閉已接單狀態的訂單,表示完成配送,與接單的邏輯同理,

<?php
session_start();
require_once('mysql_connect.php');
if(!$_SESSION['deliver_id']){
	header("Location:maskorder.php");
	exit("非法訪問!");
}
error_reporting(E_ERROR);
$deliverid=$_SESSION['deliver_id'];
$orderid=$_GET['order_id'];


//更新訂單表中的狀態資訊,只能關已接單的訂單
$jie="select * from info where order_id='$orderid'";
$jie_re = mysqli_query($link,$jie);
$jie_arr=mysqli_fetch_array($jie_re);

if($jie_arr['statue']=='已分配'){
	echo "<script language='javascript'>";
	echo "alert('未接該訂單,無法關單!');";
	echo "window.location.href='deliver.php';";
	echo "</script>";
}
elseif($jie_arr['statue']=='已關單'){
	echo "<script language='javascript'>";
	echo "alert('該訂單已關閉,請勿重復操作!');";
	echo "window.location.href='deliver.php';";
	echo "</script>";
}
else{
	//更新接關單表,關單狀態
	//關單時間
	$up_time = "update take set finish_date=now() where order_id='$orderid'";

	mysqli_query($link,$up_time) or die("關單時間錯誤".mysqli_error());
	
	$de_or_st="update info set statue='已關單' where order_id='$orderid' and statue='已接單'";
	mysqli_query($link,$de_or_st) or die("關單失敗".mysqli_error());

	echo "<script language='javascript'>";
	echo "alert('關單成功!');";
	echo "window.location.href='deliver.php';";
	echo "</script>";
}
mysqli_free_result($jie_re);
mysqli_close($link);
?>

六、系統實作總結

1、安全性

在系統完成進入除錯階段的時候,發現頁面在沒有登錄的情況下,可以直接訪問,所以需要在每個頁面的頭部加一個驗證標志,一旦發現沒有登錄后的 session,直接跳到登錄頁面,要求用戶輸入賬號和密碼登錄,具體實作是這樣的:

<?php
session_start();
if((!isset($_SESSION['work_id'])) || (!isset($_SESSION['user_id']))){
header("Location:maskorder.php");
exit;
}
?>

另外,在快遞員登錄系統查看已經分配到自己的訂單,為了用戶資訊的安全性,對訂單資料表建立了視圖,保留快遞員配送程序需要的用戶資訊,

2、用戶預約時間

用戶預約的操作,為了將具體時間保存到預約訂單資料表,供后臺管理員查看用戶預約資訊,這里我遇到了一個問題,如何獲取當前時間插入到資料庫中,后來使用了 mysql 資料庫的系統函式 now(),獲取當前時間戳來實作,

3、前后端與資料庫互動

這一次資料庫應用系統設計中,遇到另一個難點是:如何處理前端表單回傳的資料,并且與 mysql 資料庫互動,我用到了后端開發的 php 連接資料庫,對前端表單回傳資料進行處理,通過 sql 語言對資料庫進行一系列操作(查詢、修改、插入、洗掉),這個階段花費的時間相對比較長,前期我實作基本功能的互動,后期在互動程序中發現一些細節問題,比如用戶只能在訂單為被管理員處理時候修改預約資訊管理員不能重復審核訂單快遞員只能關閉已接單狀態的訂單不能重復接單關單等細節問題,我在測驗系統功能的這個程序不斷思考這些細節問題,保證系統具備最基本和最合理的功能和需求,這也讓我認識到資料庫應用系統設計地各種需要注意的問題,完善功能需求是一個開發程序的重點,

系列文章:

  1. 口罩預約管理系統——資料庫設計(前端+PHP+MySQL)
  2. 口罩預約管理系統——系統網站實作(前端+PHP+MySQL)

我的CSDN博客:https://blog.csdn.net/Charzous/article/details/108619341

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/97229.html

標籤:其他

上一篇:CloudSim 云存盤 資料副本管理

下一篇:求解一道A^B演算法的密文

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more