:::

5-3 完成整個新增流程

預設情況是:

  1. 當使用者按下「發布新聞 」時,系統會執行 http://localhost/php8/admin.php,此時沒有任何參數
  2. 進入 admin.php 程序後,會先 require 'header.php'; 以便載入樣板引擎和連接資料庫
  3. 接著過濾外部傳來變數,並取得 $op 的值,用來讓 swtich($op) 判斷現在應該做什麼。
  4. $op 為空值時,便會執行預設動作 default: 也就是將 create 指派給 $op$op = "create";)。
  5. 接著會用 $smarty->assign('now_op', $op); 產生樣板變數 $now_op 並將 $op 的值 create 指定給 $now_op 並傳送到樣板檔。
  6. 最後用 $smarty->display('admin.tpl'); 告知PHP,要將所有變數送往 admin.tpl,並載入 create.tpl 子樣板以在主內容區顯示編輯界面。

當我們送出文章時,應該是:

  1. 當使用者在「發布新聞 」按下「提交」時,系統會將表單的值,用POST的方式傳送到 http://localhost/php8/admin.php
  2. 進入 admin.php 程序後,會先 require 'header.php'; 以便載入樣板引擎和連接資料庫
  3. 接著過濾外部傳來變數,並取得 $op 的值,用來讓 swtich($op) 判斷現在應該做什麼。
  4. $op 為「store」時,便會執行預設動作 case 'store': 也就是執行將 store() 函數,以儲存文章,並上傳傳檔案和產生縮圖。
    switch ($op) {
        case 'store':
            $id = store();
            echo "新聞已成功保存,ID: " . $id;
            break;
    
        default:
            $op = "create";
            break;
    }

     

  5. 接著會用 $smarty->assign('now_op', $op); 產生樣板變數 $now_op 並將 $op 的值 store 指定給 $now_op 並傳送到樣板檔。
  6. 最後用 $smarty->display('admin.tpl'); 告知PHP,要將所有變數送往 admin.tpl,並載入store.tpl 子樣板以在主內容區顯示???

修正錯誤流程

  1. 其實,上述流程第5、6都是不必要的
  2. 因為任何資料庫異動完成後,都應該進行轉向(否則,若是重新整理畫面,資料又會多一筆)
  3. 轉向一般就是轉到列表,或者該文章內容都行,視情況而定
  4. 一般我們用 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;
    }

     

  5. 如此,新增後,便會直接導向到 index.php?id={$id} 也就是到 index.php 並帶一個 id 參數,指定要看某一篇文章

:::

書籍目錄

展開 | 闔起

http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D2019%26tbsn%3D55

計數器

今天: 3230323032303230
昨天: 2259225922592259
總計: 7952028795202879520287952028795202879520287952028