題組一中除了total和bottom沒有新增功能外,其它的功能都是能新增資料的,因此我們在設計後台儲存時,希望能使用一支程式就可以完成所有資料表的新增資料,所以我們要考慮如何判斷表單過來的資料是那一張資料表,同時有些功能可以上傳圖片,因此也要考慮是否有上傳圖片的情形。
- 綜合以上的考量,我們先建立一個
img
資料夾用來存放上傳後的圖片。 - 撰寫新增功能的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/**
* 因為包含共用的設定,session啟用,物件的宣告都放在./api/目錄下的db.php中
* 因此要執行和各資料表相關的動作時,要先引入 db.php 這個檔案
*/
include_once "./db.php";
//取得表單中的隱藏欄位 table
$table=$_POST['table'];
//將資料表的字串首字母轉為大寫,並且利用可變變數取得對應的資料表物件變數
$DB=${ucfirst($_POST['table'])};
//如果資料表是admin,則移除$_POST陣列中的pw2這個欄位
switch($table){
case "admin":
unset($_POST['pw2']);
break;
}
//判斷是否有檔案上傳成功
if(!empty($_FILES['img']['tmp_name'])){
//把檔案搬到指定的上傳檔案目錄
move_uploaded_file($_FILES['img']['tmp_name'],"../img/".$_FILES['img']['name']);
//如果檔案上傳成功,則在$_POST陣列中加入上傳的檔案名稱
$_POST['img']=$_FILES['img']['name'];
}
//除了admin這個資料表沒有sh這個欄位,其他資料表都有。
if($table != 'admin'){
//除了title這張資料表的顯示預設為0,其他的資料表預設為1
$_POST['sh']=($table=='title')?0:1;
}
//移除$_POST中的table欄位,這樣$_POST中的內容和資料表中的欄位會是對應的
unset($_POST['table']);
//將$_POST陣列寫入到資料表中
$DB->save($_POST);
//將請求導回到原本發出請求的後台頁面中
to("../back.php?do=$table");
可以先做個新增資料的動作,直接在資料表中查看資料是否新增成功,也同時在img資料夾中確認上傳圖片的功能是否正常。