You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现MySQL数据库PDF记录与文件同时删除的问题求助

解决PHP同时删除数据库记录与文件的问题

你的删除功能失效主要有几个关键问题,以下是修正方案:

原代码的问题点

  1. SQL语句未正确拼接且未执行:sprintf缺少占位符,导致生成的SQL语法错误,而且没有执行数据库删除的操作代码。
  2. 存在SQL注入风险:直接拼接$_GET参数到SQL语句中,容易被恶意攻击。
  3. 文件删除前未做存在性检查:直接调用unlink可能因文件不存在、权限不足等报错,导致流程中断。

修正后的Hapus.php代码

include "Koneksi.php";

// 先检查参数是否存在
if (!isset($_GET['url']) || empty($_GET['url'])) {
    header("location:Index.php?error=参数缺失");
    exit;
}

$folderPath = $_GET['url'];

// 1. 先执行数据库删除(使用预处理语句防注入)
$stmt = $conn->prepare("DELETE FROM simpanfile WHERE Folder_Berkas = ?");
$stmt->bind_param("s", $folderPath); // "s"表示字符串类型参数

if ($stmt->execute()) {
    // 数据库删除成功后,再删除文件
    if (file_exists($folderPath)) {
        if (unlink($folderPath)) {
            header("location:Index.php?success=删除成功");
        } else {
            // 文件删除失败,但数据库已删,可根据需求调整提示
            header("location:Index.php?warning=数据库记录已删除,但文件删除失败");
        }
    } else {
        header("location:Index.php?warning=数据库记录已删除,但文件不存在");
    }
} else {
    // 数据库删除失败
    header("location:Index.php?error=数据库删除失败");
}

$stmt->close();
$conn->close();

额外优化建议

  • 优先使用主键Kode作为删除标识:当前用Folder_Berkas可能存在多个文件同路径的情况,传递Kode更准确。比如Index.php里的删除链接改成:
    <a href="Hapus.php?kode=<?php echo $row['Kode']; ?>">Hapus</a>
    
    对应的Hapus.php需先查询文件路径再删除:
    $kode = $_GET['kode'];
    // 先查询文件路径
    $stmtSelect = $conn->prepare("SELECT Folder_Berkas FROM simpanfile WHERE Kode = ?");
    $stmtSelect->bind_param("i", $kode); // "i"对应整数类型主键
    $stmtSelect->execute();
    $result = $stmtSelect->get_result();
    $row = $result->fetch_assoc();
    $folderPath = $row['Folder_Berkas'];
    
    // 再执行删除数据库记录
    $stmtDelete = $conn->prepare("DELETE FROM simpanfile WHERE Kode = ?");
    $stmtDelete->bind_param("i", $kode);
    // 后续文件删除逻辑同之前代码
    
  • 增加权限检查:确保PHP进程对文件所在目录有写入/删除权限,否则unlink会执行失败。
  • 记录错误日志:用error_log()函数记录删除过程中的异常,方便后续排查问题。

内容的提问来源于stack exchange,提问作者Muhammad Haries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:22:37