php+mysql+bootstrap 實現成績管理系統


簡介:

這是一個可以增刪改查的成績管理系統的ajax交互練習案例

主要技術:php mysql bootstrapUI庫 ajax

效果如下:

布局:

布局使用bootstrapUI庫搭建

需引入bootstrap.css外部樣式

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">

整體分為三部分

  • 頭部: logo部分  以及添加信息按鈕
  • 中部:表頭與表格 以及刪除 修改按鈕
  • 底部:分頁

其中添加信息與修改按鈕使用模態框

需引入三個外部文件

分別為:

  • jqery.js
  • popper.js
  • bootstrap.js
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js""></script>

 

代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="./lib/bootstrap.css">
    <style>
        thead tr th {
            text-align: center;
        }
        tbody tr td {
            text-align: center;
        }
    </style>
</head>

<body>
    <!-- 頭部 -->
    <div class="container">
        <!---->
        <div class="row align-items-center my-5">
            <div class="col-2 h2">logo</div>
            <div class="col-4 h4">成績管理系統</div>
            <button type="button" class="btn btn-primary col-1" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo" id="insert">添加信息</button>
        </div>
        <!-- 表格 -->
        <div class="row my-5">
            <table class="table thead-inverse table-bordered table-sm">
                <thead>
                    <tr>
                        <th>id</th>
                        <th>姓名</th>
                        <th>成績</th>
                        <th>刪除</th>
                        <th>修改</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>1</td>
                        <td>admin</td>
                        <td>80</td>
                        <td><span class="btn btn-primary">刪除</span></td>
                        <td><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat" ly="update">修改</button></td>
                    </tr>
                </tbody>
            </table>
        </div>
        <!-- 底部分頁 -->
        <div class="row">
                <nav aria-label="Page navigation example" class="w-100">
                    <ul class="pagination pagination-sm justify-content-center">
                        <li class="page-item disabled"><a class="page-link" href="#">上一頁</a></li>
                        <li class="page-item"><a class="page-link" href="#">1</a></li>
                        <li class="page-item"><a class="page-link" href="#">2</a></li>
                        <li class="page-item"><a class="page-link" href="#">3</a></li>
                        <li class="page-item"><a class="page-link" href="#">下一頁</a></li>
                    </ul>
                </nav>
            </div>
    </div>
    <!-- 模態框 -->
    <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title" id="exampleModalLabel">請輸入信息:</h4>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
                            aria-hidden="true">&times;</span></button>
                </div>
                <div class="modal-body">
                    <form>
                        <div class="form-group">
                            <label for="recipient-name" class="control-label">姓名:</label>
                            <input type="text" class="form-control" id="name">
                        </div>
                        <div class="form-group">
                            <label for="message-text" class="control-label">機試:</label>
                            <input class="form-control" id="cpt" />
                        </div>
                        <div class="form-group">
                            <label for="message-text" class="control-label">筆試:</label>
                            <input class="form-control" id="pen" />
                        </div>
                    </form>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-primary mx-auto" data-dismiss="modal" id="send">提交</button>
                </div>
            </div>
        </div>
    </div>
</body>
<script src="./js/index.js"></script>
<!-- 模態框引入的js -->
<script src="./lib/jquery-2.2.4.js"></script>
<script src="./lib/popper.js"></script>
<script src="./lib/bootstrap.js"></script>
</html>
View Code

 創建數據庫

使用Mysql-Font創建一個新的數據庫,用來存儲數據

tip:將字符集設置為utf-8,否則無法顯示中文

設置字段

  • 名稱:id 默認
  • 名稱:name 類型:char 長度:10
  • 名稱:cpt 類型:float 長度/小數點:5,2
  • 名稱:pen類型:float 長度/小數點:5,2

 

並在數據庫提前存好兩條數據

 

功能實現--查找數據

在頁面開始加載時,就要向數據庫請求數據

大致過程為:開啟ajax向php請求,php操作數據庫拿到數據發回給前端,請求成功后渲染頁面;

this.selectUrl = "http://localhost/Management/data/select.php";    //接口就是自己寫的php文件

1.開啟ajax,請求數據

ajax({
  rl:this.selectUrl,
  success:function(res){
    console.log(res);    
    }
  })

2.php操作數據庫

  • 鏈接數據庫
  • 准備報錯
    • 如果連接成功,不報錯
    • 如果連接失敗,將錯誤信息以json格式返回,錯誤碼為code=0;
  • 准備mysql命令
  • 發送mysql命令,並將數據保存在$res
  • 判斷mysql返回的數據
    • 獲取數據成功,將數據處理成json樣式數據返回
    • 獲取數據失敗,將錯誤信息="獲取數據失敗"返回,錯誤碼為code=1;

查詢的php文件代碼如下:

<?php
    // 鏈接數據庫    服務器:端口號  用戶名 密碼 數據庫名稱
    $link = @new mysqli("localhost:3306","root","root","test");
    if($link->connect_error){
        //將錯誤信息的關聯數組處理成json,返回給前端,請求失敗報錯碼code=0
        $err = array("code"=>0,"msg"=>$link->connect_error);
        die(json_encode($err));  //結束語句,並打印報錯(類似於return)
    }

    $str = "SELECT * FROM management";
    $res = $link->query($str);

    //判斷res是否為空數據
    if($res){
        $str = "";
        while($arr =  $res->fetch_assoc()){  //將res資源型數據,解析成關聯數組,因為每次只能解析一條,所以while重復解析
            $str = $str . json_encode($arr) . ",";  //點為字符串拼接                  
        }
        echo "[" . substr($str,0,-1) . "]";  //將對象拼接成json格式  中間加逗號 末尾去掉逗號 兩邊加中括號
    }else{
        //如果獲取數據失敗  將錯誤碼code=2  錯誤信息="獲取數據失敗"存入關聯數組
        $err = array("code"=>2,"msg"=>"獲取數據失敗");
        echo json_encode($err);
    }
?>

 3.渲染頁面

在完成php接口和成功開啟ajax請求到數據后;

如果請求成功,可以在控制台看到拿到的數據

如果數據庫連接失敗,會提示錯誤碼code=0;

此時就可以開始寫渲染頁面的功能。

(1)思路

將拿到的數據解析成對象 ===> JSON.parse(res)

判斷是否有錯誤碼

  • 沒有錯誤碼說明,請求數據成功
  • 錯誤碼為0,說明鏈接數據庫失敗
  • 錯誤碼為2,說明請求數據失敗

如果成功請求到數據,渲染頁面;

(2).代碼實現:

// 查詢數據
selectLoad(){
    var that = this;
    ajax({
        url:this.selectUrl,
        success:function(res){
            // console.log(res);
            that.res = JSON.parse(res);
            if(that.res.code == 0){
                alert("連接數據庫失敗");
            }else if(that.res == 1){
                alert("請求數據失敗")
            }else{
                that.display();
            }
        }
    })
}

display(){
    // console.log(this.res);
    var str = "";
    for(var i=0;i<this.res.length;i++){
        str += `<tr>
                    <td>${this.res[i].Id}</td>
                    <td>${this.res[i].name}</td>
                    <td>${this.res[i].cpt}</td>
                    <td>${this.res[i].pen}</td>
                    <td><span class="btn btn-primary btn-d">刪除</span></td>
                    <td><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat" ly="update">修改</button></td>
                </tr>`;
    }
    this.tbody.innerHTML = str;
}
View Code

 功能實現 -- 添加和修改信息

思路:

1.頁面中有兩個模態框,添加信息和修改信息,首先要判斷點擊的是添加按鈕還是修改按鈕

  • 模態框引用了外部js,為了防止事件覆蓋,使用事件監聽添加事件
  • 第一個:添加信息按鈕(id = insert),可以直接添加點擊事件監聽
  • 第二個:修改按鈕, 利用事件委托,給修改按鈕添加點擊事件監聽
  • 第三個:提交按鈕(id = sned),直接添加點擊事件監聽

(1) 給模態框聲明一個狀態量

this.type = 0        //為0時表示添加信息

(2) 點擊添加按鈕是,將type = 0;

(3) 點擊修改按鈕時,將type = 1;

(4) 點擊提交按鈕時,判斷狀態,提交數據

實現的功能是:

  • 點擊按鈕,提交后,控制台打印"添加"
  • 點擊修改按鈕,提交后.控制台打印"提交"

代碼如下:

addEvent(){
            var that = this;
            //給添加按鈕添加事件監聽
            this.insert.addEventListener("click",function(){
                that.type = 0;
            })
            //利用事件委托,給修改按鈕添加事件監聽
            this.tbody.addEventListener("click",function(eve){
                var e = eve || window.event;
                var target = e.target || e.srcElement;

                // 如果選擇的元素,自定義屬性ly為update,則選中了修改按鈕
                if(target.getAttribute("ly") === "update"){
                    that.type = 1;
                }
            })
            //給提交按鈕添加事件監聽
            this.send.addEventListener("click",function(){
                
                if(that.type == 0){
                    console.log("添加");   
                }else{
                    console.log("修改");
                    
                }
            })
        }
View Code

效果如下:

添加信息時,需要將輸入框的內容清空

that.name.value = that.cpt.value = that.pen.value = "";

2.更改數據后將添加或者數據寫入到頁面

  • 在寫入數據之前,需要先獲取輸入框中的value,
  • 將獲取到的value,通過ajax發送到php,
  • php操作數據庫,將結果返回給前端.

(1) 獲取數據

// 獲取模態框數據  (姓名 機試成績 筆試成績)
  this.name = document.getElementById("name");
  this.cpt = document.getElementById("cpt");
  this.pen = document.getElementById("pen");
//點擊提交按鈕時,獲取數據,准備發給ajax that.n = that.name.value; that.c = that.cpt.value; that.p = that.pen.value;

(2) 將數據發給ajax,請求成功之后,解析數據,准備渲染

// 添加信息,開啟ajax 發送並請求新數據
        insertLoad(){
            ajax({
                url:this.insertUrl,
                data:{
                    n:this.n,
                    c:this.c,
                    p:this.p
                },
                success:function(res){
                    console.log(res);                 
                }
            })
        }

 (3) 准備PHP文件 數據接口

this.insertUrl = "http://localhost/Management/data/insert.php";

添加功能的php文件思路:

  • 連接數據庫
    •  鏈接成功,不報錯
    •  連接失敗,將錯誤信息以json格式返回,錯誤碼為code=0
  • 准備查詢mysql命令
  • 向數據庫發送添加mysql命令,會返回布爾值,並將返回結果保存在$q
  • 判斷是否成功添加數據
    •  如果成功添加,執行封裝好的查詢數據函數,返回查詢到的函數
    •  如果添加失敗,將錯誤信息返回,錯誤碼為code = 2;
<?php
    // 鏈接數據庫    服務器:端口號  用戶名 密碼 數據庫名稱
    $link = @new mysqli("localhost:3306","root","root","test");
    if($link->connect_error){
        //將錯誤信息的關聯數組處理成json,返回給前端,請求失敗報錯碼code=0
        $err = array("code"=>0,"msg"=>$link->connect_error);
        die(json_encode($err));  //結束語句,並打印報錯(類似於return)
    }


    $n = @$_REQUEST["n"];
    $c = @$_REQUEST["c"];
    $p = @$_REQUEST["p"];

    //mysql添加命令
    $str = "INSERT management (name,cpt, pen) VALUES('".$n."',".$c.",".$p.")";
    //發送mysql命令
    $q = $link->query($str);

    if($q){
         echo select();   //如果添加成功,返回查詢數據的狀態
    }else{
        $err = array("code"=>2,"msg"=>"添加數據失敗"); //如果添加失敗,返回錯誤信息,與錯誤碼
        die(json_encode($err)); 

    }


    // 將查詢數據的代碼封裝成一個函數,返回報錯信息與成功請求到的數據
    function select(){
        global $link;
        $str = "SELECT * FROM management";
        $res = $link->query($str);
        if($res){
            $str = "";
            while($arr =  $res->fetch_assoc()){  
                $str = $str . json_encode($arr) . ",";             
            }
            return "[" . substr($str,0,-1) . "]";
        }else{
            $err = array("code"=>2,"msg"=>"獲取數據失敗");
            return json_encode($err);
        }
    }

?>
View Code

(4)渲染頁面

  • 成功添加數據后,會返回一個json樣式的數據
  • 添加數據失敗后,會返回包含有錯誤碼的數據

將拿到的數據解析成對象 ===> JSON.parse(res)

所以判斷是否有錯誤碼

  • 沒有錯誤碼說明,請求數據成功
  • 錯誤碼為0,說明鏈接數據庫失敗
  • 錯誤碼為2,說明請求數據失敗

如果成功請求到數據,渲染頁面;

代碼如下

// 添加信息,開啟ajax 發送並請求新數據
        insertLoad(){
            var that = this;
            ajax({
                url:this.insertUrl,
                data:{
                    n:this.n,
                    c:this.c,
                    p:this.p
                },
                success:function(res){
                    that.res = JSON.parse(res);
                    if(that.res.code == 0){
                        alert("連接數據庫失敗");
                    }else if(that.res == 2){
                        alert("添加數據失敗")
                    }else{
                        // console.log(that.res);   
                        that.display();
                        // 刪除方法
                        that.delete();
                    }              
                }
            })
        }
View Code

效果如下:

 


免責聲明!

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



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