:::
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參數,指定要看某一篇文章
5-2-4 檔案上傳與接收