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
    include_once "db.php";

    //取得表單傳來的table值
    $table=$_POST['table'];
    //建立對應的資料表物件
    $DB=${ucfirst($table)};

    //依照傳來的$_POST['id']陣列,逐筆處理資料
    foreach($_POST['id'] as $key => $id){

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

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

    //如果原本的資料表中有text欄位,則將$_POST['text']中的資料寫入
    if(isset($row['text'])){
    $row['text']=$_POST['text'][$key];
    }

    //依照不同的資料表,對應的欄位做不同的處理
    switch($table){
    case "title":
    //單選-如果$_POST['sh']的值和這筆資料的id一樣,則將sh設為1,否則設為0
    $row['sh']=(isset($_POST['sh']) && $_POST['sh']==$id)?1:0;
    break;
    case "admin":
    $row['acc']=$_POST['acc'][$key];
    $row['pw']=$_POST['pw'][$key];
    break;
    case "menu":
    $row['href']=$_POST['href'][$key];
    //多選-如果$_POST['sh']陣列中有這筆資料的id,則將sh設為1,否則設為0
    $row['sh']=(isset($_POST['sh']) && in_array($id,$_POST['sh']))?1:0;
    break;
    default:
    //除了上述的資料表,其餘的資料表都會有sh欄位,所以都可以用這個處理
    $row['sh']=(isset($_POST['sh']) && in_array($id,$_POST['sh']))?1:0;
    }
    //將處理完的資料寫回資料表中
    $DB->save($row);
    }
    }

    to("../back.php?do=$table");