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


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

一、前言

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

三、用戶模塊

      1、用戶預約系統界面

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

      3、用戶修改預約信息

四、管理員模塊

      1、管理員登陸界面

      2、查看用戶預約訂單

      3、修改/刪除用戶信息

五、快遞員模塊

     1、快遞員登錄配送系統

     2、接單

     3、關單

六、系統實現總結

     1、安全性

     2、用戶預約時間

     3、前后端與數據庫交互


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

本系統項目源碼已經上傳CSDN資源啦,有需要可以下載!傳送門 (https://download.csdn.net/download/Charzous/18776350

一、前言

在上一篇《口罩預約管理系統——數據庫設計(前端+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>
View Code

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>
View Code

四、管理員模塊

系統實現基本功能,對於頁面布局未設計得很精美,所以接下來的管理員界面就是這樣 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>
View Code

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>
View Code

五、快遞員模塊

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>";
                        
                    }
                    ?>   
View Code

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 語言對數據庫進行一系列操作(查詢、修改、插入、刪除),這個階段花費的時間相對比較長,前期我實現基本功能的交互,后期在交互過程中發現一些細節問題,比如用戶只能在訂單為被管理員處理時候修改預約信息管理員不能重復審核訂單快遞員只能關閉已接單狀態的訂單不能重復接單關單等細節問題,我在測試系統功能的這個過程不斷思考這些細節問題,保證系統具備最基本和最合理的功能和需求,這也讓我認識到數據庫應用系統設計地各種需要注意的問題,完善功能需求是一個開發過程的重點。

 

本系統項目源碼已經上傳CSDN資源啦,有需要可以下載!傳送門 (https://download.csdn.net/download/Charzous/18776350

 

系列文章:

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

我的博客園:https://www.cnblogs.com/chenzhenhong/p/13710125.html

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

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:http://blog.csdn.net/Charzous/article/details/108619341


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM