1. 寫在開始之前 1-1 安裝開發環境 1-2 上課範例及需求 2. PHP基本語法 2-1 註解 2-2 PHP資訊頁 2-3 建立專案目錄 3. 套用Smarty樣板 3-1 使用 Smarty 4. 前端操作界面 4-1 BootStrap 基礎排版 4-2 設計登入面板 4-3 登入表單 4-4 讓sublime自動排版 4-5 引入樣板檔 5. 判斷是否登入 5-1 接收變數 5-2 設定管理密碼 5-3 過濾變數 5-4 if 判斷式 5-5 用 $op 及 switch 迴圈來做流程控制 5-6 檢查帳號密碼 5-7 登入後,畫面應有的變化 6. 把程式片段打包成函數 6-1 資料類型 6-2 PHP常用運算符(子) 7. 資料庫規劃 7-1 常用資料庫的欄位類型 8. 增加註冊機制 8-1 連上資料庫 8-2 新增使用者到資料庫 8-3 註冊哪有這麼簡單! 8-4 異常處理 9. 從資料庫中讀取資料的方法 9-1 改寫 login() 9-2 改寫工具列 10. 製作活動管理頁面 10-1 製作頁首、頁尾檔 10-2 用物件來做表單 10-3 寫入活動到資料庫 11. 重新調整流程 11-1 列出所有活動 11-2 列出單一活動 12. 加入管理功能 12-1 執行修改 12-2 加入刪除功能 12-3 確認後刪除 13. 加入報名功能 13-1 怎樣才叫做已經報名? 13-2 列出已報名名單 13-3 同時讀取兩個資料表 13-4 報名過後,就不可再報 13-5 取消報名 14. 開始處理小細節 14-1 過期活動不該顯示出來 14-2 新增分頁 14-3 個資保護 14-4 刪除活動得同時刪除報名者 14-5 寄發通知信 15. 我參加的活動
13-5
取消報名
取消報名實際上就是把 signups 中的一筆報名資料刪除而已。
還記得之前教的 確認後刪除 嗎?依樣畫葫蘆即可!
一、修改連結並產生相關函數
一樣先把 show_action.tpl 和 list_action.tpl 中的連結改成這樣:
<a href="javascript:delete_signup({$action.action_id})" class="btn btn-danger btn-xs">取消報名</a>
接著修改 templates\sweet-alert.tpl(或者要另外做一個新的也行),多加上一個新的函數
function delete_signup(id){
swal({
title: "確定要取消嗎?",
text: "取消後就不能參加活動囉!",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "是!含淚取消!",
cancelButtonText: "不...還是繼續參加",
closeOnConfirm: false
}, function(){
swal("OK!取消惹!", "下次有機會再來啦!", "success");
location.href='index.php?op=delete_signup&action_id=' + id;
});
}
重點在於14行,也就是實際會連結到 index.php,並且帶個活動編號過去,至於uid不用特別帶過去,因為session中可以抓得到。
二、做出刪除的函數
接著到 index.php,先新增一組流程:
case "delete_signup":
delete_signup($action_id);
header("location:{$_SERVER['PHP_SELF']}?action_id=$action_id");
exit;
接著實際做出該函數:
//取消報名
function delete_signup($action_id)
{
global $db;
$sql = "DELETE FROM `signups` WHERE `action_id`='{$action_id}' and `uid`='{$_SESSION['uid']}'";
if (!$db->query($sql)) {
throw new Exception($db->error);
}
$_SESSION['uid_signup'] = array_diff($_SESSION['uid_signup'], [$action_id]);
}
報名了要把該活動加到 $_SESSION['uid_signup'] 陣列中,同樣的,取消報名也要從 $_SESSION['uid_signup'] 陣列中把該編號拿掉。不拿掉會怎樣?不會怎樣,系統確實是刪了資料,但該活動還是會一直出現「取消報名」的按鈕而已。
所以,我們在第10行利用 array_diff([陣列一], [陣列二]) 來達成刪掉陣列中某個值。
三、關於array_diff()
這個其實並不是什麼移除陣列內容的函數,而是拿來比對兩個陣列的差異,並將差異的部份傳回一個新陣列。
所以,假設$_SESSION['uid_signup'] 陣列中有三個活動,依序為 [1, 2, 3],那麼,若是要取消活動 2,我們只要寫成 array_diff([1, 2, 3], [2]),該函數就會傳回陣列 [1, 3],因為這剛好是差異部份,是不是看起來如同 2 被刪除了一般!
1. 寫在開始之前 1-1 安裝開發環境 1-2 上課範例及需求 2. PHP基本語法 2-1 註解 2-2 PHP資訊頁 2-3 建立專案目錄 3. 套用Smarty樣板 3-1 使用 Smarty 4. 前端操作界面 4-1 BootStrap 基礎排版 4-2 設計登入面板 4-3 登入表單 4-4 讓sublime自動排版 4-5 引入樣板檔 5. 判斷是否登入 5-1 接收變數 5-2 設定管理密碼 5-3 過濾變數 5-4 if 判斷式 5-5 用 $op 及 switch 迴圈來做流程控制 5-6 檢查帳號密碼 5-7 登入後,畫面應有的變化 6. 把程式片段打包成函數 6-1 資料類型 6-2 PHP常用運算符(子) 7. 資料庫規劃 7-1 常用資料庫的欄位類型 8. 增加註冊機制 8-1 連上資料庫 8-2 新增使用者到資料庫 8-3 註冊哪有這麼簡單! 8-4 異常處理 9. 從資料庫中讀取資料的方法 9-1 改寫 login() 9-2 改寫工具列 10. 製作活動管理頁面 10-1 製作頁首、頁尾檔 10-2 用物件來做表單 10-3 寫入活動到資料庫 11. 重新調整流程 11-1 列出所有活動 11-2 列出單一活動 12. 加入管理功能 12-1 執行修改 12-2 加入刪除功能 12-3 確認後刪除 13. 加入報名功能 13-1 怎樣才叫做已經報名? 13-2 列出已報名名單 13-3 同時讀取兩個資料表 13-4 報名過後,就不可再報 13-5 取消報名 14. 開始處理小細節 14-1 過期活動不該顯示出來 14-2 新增分頁 14-3 個資保護 14-4 刪除活動得同時刪除報名者 14-5 寄發通知信 15. 我參加的活動