0%

[技能檢定]題組一 步驟7 撰寫新增功能api

題組一中除了total和bottom沒有新增功能外,其它的功能都是能新增資料的,因此我們在設計後台儲存時,希望能使用一支程式就可以完成所有資料表的新增資料,所以我們要考慮如何判斷表單過來的資料是那一張資料表,同時有些功能可以上傳圖片,因此也要考慮是否有上傳圖片的情形。

  1. 綜合以上的考量,我們先建立一個 upload 資料夾,
  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
    /**
    * 因為包含共用的設定,session啟用,物件的宣告都放在根目錄下的base.php中
    * 因此要執行和各資料表相關的動作時,要先引入 base.php 這個檔案
    */
    include_once "../base.php";

    //取得表單中的隱藏欄位 table
    $table=$_POST['table'];

    //將資料表的字串首字母轉為寫
    $db=ucfirst($table);

    //建立一個空陣列用來存放與資料表欄位對應的資料
    $data=[];

    //判斷是否有檔案上傳成功
    if(!empty($_FILES['img']['tmp_name'])){

    //如果檔案上傳成功,則取得檔案的名稱
    $data['img']=$_FILES['img']['name'];

    //把檔案搬到指定的上傳檔案目錄
    move_uploaded_file($_FILES['img']['tmp_name'],"../upload/".$_FILES['img']['name']);
    }

    //由於不是每個資料表的欄位名稱都相同,表單也是,
    //因此我們根據不同的資料表名來切換不同的資料取得
    switch($table){
    case 'title':
    $data['text']=$_POST['text'];
    $data['sh']=0; //title 的顯示預設為不顯示
    break;
    case 'admin':
    $data['acc']=$_POST['acc'];
    $data['pw']=$_POST['pw'];
    break;
    case 'menu':
    $data['text']=$_POST['text'];
    $data['href']=$_POST['href'];
    $data['sh']=1;
    break;
    default:

    //ad,mvim,image,news,這四張表如果有$_POST['text']就紀錄text
    //不然就只要紀錄檔名就可以
    if(isset($_POST['text'])){
    $data['text']=$_POST['text'];
    }
    $data['sh']=1; //顯示預設為1
    }

    //利用可變變數來執行各個類別中的save()方法
    //將$data陣列寫入到資料表中
    $$db->save($data);

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

可以先做個新增資料的動作,直接在資料表中查看資料是否新增成功,也同時在upload資料夾中確認上傳圖片的功能是否正常。