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

PHP任务更新时图片丢失、数据库字段置空问题求助修复

问题排查与修复方案

问题根源

  • 仅更新任务不修改图片时,$ime变量未初始化,默认是空字符串,传入Zadatak::izmeni()后触发else分支,执行slika = NULL的SQL语句,直接清空数据库图片字段
  • 页面未保留原有图片的信息,无法在不修改图片时维持原字段值
  • 删除图片的逻辑未关联后端,导致后端无法区分"不修改图片"和"删除图片"两种操作

修复方案

步骤1:修改后端PHP逻辑,保留原有图片信息

在处理更新请求时,先获取任务原有图片路径,将$ime初始化为原有图片值,仅在上传新图或明确删除图片时修改该值:

else if (isset($_POST["button"])) {
    $zadatak = trim($_POST["zadatak"]);
    $naziv = trim($_POST["naziv"]);
    $kategorija = trim($_POST["kategorija"]);
    $opis = trim($_POST["opis"]);
    $izvrsen = trim($_POST["status"]);
    $obrisi = trim($_POST["obrisi"]);

    // 初始化$ime为原有图片路径
    $podaci = Zadatak::vratiPodatke($zadatak, $konekcija);
    $ime = $podaci->slika;

    // 明确删除图片时,清空$ime并删除服务器文件
    if ($obrisi != "") {
        $ime = "";
        if ($podaci->slika != "") {
            unlink("../slike/".$podaci->slika);
        }
    }

    // 上传新图片时,覆盖$ime并替换服务器文件
    if ($_FILES["real_file"]["name"] != "") {
        if ($podaci->slika != "") {
            unlink("../slike/".$podaci->slika);
        }
        $ime = time()."_".$_FILES["real_file"]["name"];
        $target = "../slike/".$ime;
        move_uploaded_file($_FILES["real_file"]["tmp_name"], $target);
    }

    Zadatak::izmeni($zadatak, $naziv, $kategorija, $opis, $izvrsen, $ime, $konekcija);
}

步骤2:调整更新函数,区分"保留图片"和"删除图片"操作

修改izmeni函数,仅在$slika明确为空时才将数据库字段设为NULL,否则保留/设置图片路径:

public static function izmeni($zadatak, $naziv, $kategorija, $opis, $izvrsen, $slika, mysqli $konekcija) {
    $datumZavrsetka = null;
    if ($izvrsen == "1") {
        $datumZavrsetka = date('Y-m-d H:i:s');
    }

    if ($slika === "") {
        // 明确删除图片,设为NULL
        $dodaj = $konekcija->prepare("UPDATE zadatak SET naziv = ?, kategorija = ?, opis = ?, izvrsen = ?, datumZavrsetka = ?, slika = NULL WHERE zadatakID = ?");
        $dodaj->bind_param("sisisi", $naziv, $kategorija, $opis, $izvrsen, $datumZavrsetka, $zadatak);
    } else {
        // 保留原有图片或设置新图片
        $dodaj = $konekcija->prepare("UPDATE zadatak SET naziv = ?, kategorija = ?, opis = ?, izvrsen = ?, datumZavrsetka = ?, slika = ? WHERE zadatakID = ?");
        $dodaj->bind_param("sisissi", $naziv, $kategorija, $opis, $izvrsen, $datumZavrsetka, $slika, $zadatak);
    }
    $dodaj->execute();
    return $dodaj;
}

步骤3:完善前端删除图片的标记逻辑

修改resetujFormu()函数,标记删除图片的操作,让后端能识别:

function resetujFormu() {
    $("#obrisi").val("1");
    $("#slikawrapnad").hide();
    $("#slikadiv").show();
}

步骤4:确保表单支持文件上传

给表单添加enctype="multipart/form-data"属性,保证文件上传功能正常:

<form id="formaizmena" method="post" enctype="multipart/form-data">
    <!-- 现有表单内容 -->
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:42:02