請用PHP8產生名為delete($id)的函數,
可以根據id刪除school_news資料表(MyISAM 引擎)的某一筆資料
PDO物件已建立,global引入使用即可
SQL用 ? 佔位符的方式處理
刪除時,必須也刪除 uploads/$id/ 目錄以及其中的所有圖檔
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:
...略...
}