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

PHP CMS后台更新未选新图片导致原有图片被清除的问题求助

问题解决方法

你的修复代码无效的核心原因是:$row['page_image']在更新代码块中已经无法安全访问——$row是在页面顶部的查询循环中定义的,到执行更新逻辑时,该变量的作用域已失效(依赖它的取值存在不确定性)。另外,仅通过empty($_FILES['image']['name'])判断是否上传图片不够严谨,应该结合文件上传错误码来确认是否有有效上传。

以下是具体修复步骤:

1. 保存原有图片路径到全局可访问变量

在页面顶部的查询循环中,新增变量存储原有图片路径,确保更新逻辑能调用到:

while($row=mysqli_fetch_assoc($get_page_query)){
    $page_title=$page;
    $page_content=$row['page_content'];
    $page_image=$row['page_image'];
    $existing_page_image = $row['page_image']; // 新增:持久化原有图片路径
}

2. 修改更新逻辑的图片处理逻辑

替换你尝试的修复代码,改用$existing_page_image,并通过标准上传错误码判断是否有有效图片上传:

if(isset($_POST['update'])){
    echo "Update posted";

    $page_content = $_POST['page_content'];
    
    // 仅当有有效文件上传时,才更新图片
    if($_FILES['image']['error'] === UPLOAD_ERR_OK){
        $page_image = $_FILES['image']['name'];
        $page_image_tmp = $_FILES['image']['tmp_name'];
        // 建议增加文件类型/大小校验,避免恶意文件上传
        move_uploaded_file($page_image_tmp, "../images/$page_image");
    } else {
        // 无有效上传时,沿用原有图片路径
        $page_image = $existing_page_image;
    }

    // 关键:改用预处理语句防止SQL注入(原代码存在严重安全风险)
    $query = "UPDATE pages SET page_image=?, page_content=? WHERE page_title=?";
    $stmt = mysqli_prepare($connection, $query);
    mysqli_stmt_bind_param($stmt, "sss", $page_image, $page_content, $page);
    $update_page_query = mysqli_stmt_execute($stmt); 
    
    if(!$update_page_query){
        die("Update query problem" . mysqli_error($connection));    
    }
    header("location:admin.php?page={$page}");
    exit; // 跳转后必须终止脚本,避免后续代码意外执行
}

额外提示

  • 建议在文件上传环节增加文件类型校验(仅允许jpg/png等图片格式)和文件大小限制,降低服务器安全风险。
  • 永远不要直接将用户输入($_GET/$_POST/$_FILES内容)拼接到SQL语句中,预处理语句是防范SQL注入的标准方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:01:27