:::

8-7 加入刪除功能

  1. 這種簡單的功能也是問一下AI
    請用PHP8產生名為delete($id)的函數,
    可以根據id刪除school_news資料表(MyISAM 引擎)的某一筆資料
    PDO物件已建立,global引入使用即可
    SQL用 ? 佔位符的方式處理
    
    刪除時,必須也刪除 uploads/$id/ 目錄以及其中的所有圖檔
    
    

     

  2. 根據AI的回覆,我們
    function delete(int $id): bool
    {
        global $pdo;
    
        try {
            // 刪除資料庫記錄
            $stmt = $pdo->prepare("DELETE FROM school_news WHERE id = ?");
            $result = $stmt->execute([$id]);
    
            if (!$result) {
                throw new Exception("無法刪除 ID 為 {$id} 的記錄");
            }
    
            // 如果資料庫記錄刪除成功,繼續刪除相關文件和目錄
            $uploadDir = "uploads/{$id}/";
            if (is_dir($uploadDir)) {
                $files = new RecursiveIteratorIterator(
                    new RecursiveDirectoryIterator($uploadDir, RecursiveDirectoryIterator::SKIP_DOTS),
                    RecursiveIteratorIterator::CHILD_FIRST
                );
    
                foreach ($files as $fileinfo) {
                    $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
                    if (!$todo($fileinfo->getRealPath())) {
                        error_log("無法刪除文件: " . $fileinfo->getRealPath());
                        // 繼續執行,不中斷程序
                    }
                }
    
                if (!rmdir($uploadDir)) {
                    error_log("無法刪除目錄: " . $uploadDir);
                    // 繼續執行,不中斷程序
                }
            }
    
            return true;
    
        } catch (Exception $e) {
            error_log("Error in destroy function: " . $e->getMessage());
            return false;
        }
    }
    
    

     

  3. 我們將 delete() 放至 admin.php 最後,然後在 admin.php 的流程多一組設定:
    switch ($op) {
        ...略...
    
        case 'delete':
            delete($id);
            header("location:index.php");
            exit;
    
        default:
    
        ...略...
    }

     

  4. 這樣就可以刪除文章試試囉!也請檢查 uploads 下的對應目錄是否已經刪除

:::

書籍目錄

展開 | 闔起

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

計數器

今天: 1091109110911091
昨天: 2027202720272027
總計: 7972132797213279721327972132797213279721327972132