:::
8-7 加入刪除功能
- 這種簡單的功能也是問一下AI
請用PHP8產生名為delete($id)的函數, 可以根據id刪除school_news資料表(MyISAM 引擎)的某一筆資料 PDO物件已建立,global引入使用即可 SQL用 ? 佔位符的方式處理 刪除時,必須也刪除 uploads/$id/ 目錄以及其中的所有圖檔 - 根據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; } } - 我們將
delete()放至admin.php最後,然後在admin.php的流程多一組設定:switch ($op) { ...略... case 'delete': delete($id); header("location:index.php"); exit; default: ...略... } - 這樣就可以刪除文章試試囉!也請檢查 uploads 下的對應目錄是否已經刪除
8-6 完成圖片管理