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