0%

[技能檢定]題組一 步驟9 撰寫編輯資料api

由題組提供的參考圖,原題意是要求可以同時編輯更新多筆資料,因此我們將資料列表及可輸入資料的表單元件都放在同一個 <form> 表單中,這樣當按下送出按鈕時,所有的表單資料都會被送往後端去處理。
我們的設計希望一支api可以儘可能的處理更多的功能,因此我們設計了隱藏欄位來增加各種屬性,提供後端程式做為判斷的依據。

  1. 建立 /api/edit.php 檔案
  2. 選寫編輯多筆資料的api
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    include_once "../base.php";

    $table=$_POST['table'];
    $db=ucfirst($table);

    //建立一個變數做為接收不同來源資料的依據
    $rows='';

    //由於不同功能的$_POST內容不一樣,因此針對比較特殊的幾個功能進行處理
    switch($table){
    case "admin":
    $rows=$_POST['acc'];
    break;
    case "image":
    case "mvim":
    $rows=$_POST['id'];
    break;
    default:
    $rows=$_POST['text'];
    }

    //使用迴圈來逐一檢查每一筆資料,其中每一筆資料的key值都代表了資料id
    foreach($rows as $id => $row){

    //先判斷del有沒有被勾選,如果有被勾選,接下來是確認目前這筆資料的
    //id有沒有在$_POST['del']中,有則刪除,無則進入編輯
    if(isset($_POST['del']) && in_array($id,$_POST['del'])){
    $$db->del($id);
    }else{

    //先將要編輯的資料從資料表中取出
    $data=$$db->find($id);

    //依照不同的資料表進行不同的處理
    switch($table){
    case "title":
    $data['text']=$row;
    $data['sh']=($_POST['sh']==$id)?1:0;
    break;
    case "admin":
    $data['acc']=$row;
    $data['pw']=$_POST['pw'][$id];
    break;
    case "menu":
    $data['text']=$row;
    $data['href']=$_POST['href'][$id];

    //判斷這筆資料的顯示狀態為顯示(1)或隱藏(0)
    $data['sh']=(isset($_POST['sh']) && in_array($id,$_POST['sh']))?1:0;
    break;
    default:
    if(isset($_POST['text'])){
    $data['text']=$row;
    }
    $data['sh']=(isset($_POST['sh']) && in_array($id,$_POST['sh']))?1:0;
    }

    //更新完成後回存進資料表
    $$db->save($data);
    }
    }

    //將請求導回到原本發出請求的後台頁面中
    to("../backend.php?do=".$table);