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
相关产品推荐
相关产品推荐

