5-3
完成整個新增流程
預設情況是:
- 當使用者按下「發布新聞 」時,系統會執行
http://localhost/php8/admin.php
,此時沒有任何參數
- 進入
admin.php
程序後,會先 require 'header.php';
以便載入樣板引擎和連接資料庫
- 接著過濾外部傳來變數,並取得
$op
的值,用來讓 swtich($op)
判斷現在應該做什麼。
- 當
$op
為空值時,便會執行預設動作 default:
也就是將 create
指派給 $op
( $op = "create";
)。
- 接著會用
$smarty->assign('now_op', $op);
產生樣板變數 $now_op
並將 $op
的值 create
指定給 $now_op
並傳送到樣板檔。
- 最後用
$smarty->display('admin.tpl');
告知PHP,要將所有變數送往 admin.tpl
,並載入 create.tpl
子樣板以在主內容區顯示編輯界面。
當我們送出文章時,應該是:
- 當使用者在「發布新聞 」按下「提交」時,系統會將表單的值,用POST的方式傳送到
http://localhost/php8/admin.php
- 進入
admin.php
程序後,會先 require 'header.php';
以便載入樣板引擎和連接資料庫
- 接著過濾外部傳來變數,並取得
$op
的值,用來讓 swtich($op)
判斷現在應該做什麼。
- 當
$op
為「store
」時,便會執行預設動作 case 'store':
也就是執行將 store()
函數,以儲存文章,並上傳傳檔案和產生縮圖。
switch ($op) {
case 'store':
$id = store();
echo "新聞已成功保存,ID: " . $id;
break;
default:
$op = "create";
break;
}
接著會用 $smarty->assign('now_op', $op);
產生樣板變數 $now_op
並將 $op
的值 store
指定給 $now_op
並傳送到樣板檔。
最後用 $smarty->display('admin.tpl');
告知PHP,要將所有變數送往 admin.tpl
,並載入store.tpl
子樣板以在主內容區顯示???
修正錯誤流程
- 其實,上述流程第5、6都是不必要的
- 因為任何資料庫異動完成後,都應該進行轉向(否則,若是重新整理畫面,資料又會多一筆)
- 轉向一般就是轉到列表,或者該文章內容都行,視情況而定
- 一般我們用
header("location: 新位址");
來進行轉向,轉向完為避免繼續執行底下動作(第5、6),我們可以直接用 exit;
來停止程式並完成轉向:
switch ($op) {
case 'store':
// 儲存資料
try {
$id = store();
header("Location: index.php?id={$id}");
exit;
} catch (Exception $e) {
echo "儲存失敗: " . $e->getMessage();
}
default:
// 編輯表單
$op = 'create';
break;
}
- 如此,新增後,便會直接導向到
index.php?id={$id}
也就是到 index.php
並帶一個 id
參數,指定要看某一篇文章