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

添加图片分类时图片未移动到指定目录,PHP代码哪里存在问题?

问题根因及修复方案

核心错误:文件移动逻辑位置错误

你代码中的move_uploaded_file文件移动逻辑被完全包裹在if ($check > 0)的判断分支内,这个$check是分类名校验的计数返回值:

  • 当你新增分类时,分类名不存在,$check值为0,整个判断分支不会执行,文件移动代码完全不会运行
  • 但下方数据库操作逻辑只判断$msg是否为空,只要没有分类重复的报错,就会直接把文件名写入数据库,这就是你遇到“数据库写成功但文件没移动”的直接原因

其他可能的问题

  • 文件夹权限不足:确认web服务运行用户(如www-data、apache)对image目录有写入权限,Linux环境可临时设置权限为755测试
  • 路径配置错误:建议使用绝对路径定位目录,避免相对路径匹配错误,可修改路径定义为$folder = __DIR__ . "/image/" . $filename;
  • 前端表单配置错误:确认上传表单添加了enctype="multipart/form-data"属性,未配置该属性的表单无法正常提交文件
  • 更新逻辑缺失字段:现有更新分类的SQL语句没有同步更新filename字段,修改分类上传新图时新文件名不会写入数据库

核心代码修复示例

把文件移动逻辑从if ($check > 0)分支中移出,调整后对应代码段如下:

if (isset($_POST['submit'])) {
    $filename   = $_FILES["uploadfile"]["name"];
    $tempname   = $_FILES["uploadfile"]["tmp_name"];
    $folder     = "image/" . $filename;
    $categories = get_safe_value($link, $_POST['categories']);
    $res        = mysqli_query($link, "select * from categories where categories='$categories'");
    $check      = mysqli_num_rows($res);
    if ($check > 0) {
        if (isset($_GET['id']) && $_GET['id'] != '') {
            $getData = mysqli_fetch_assoc($res);
            if ($id != $getData['id']) {
                $msg = "Categories already exist";
            }
        } else {
            $msg = "Categories already exist";
        }
    }

    // 把文件移动逻辑移到分类校验分支外
    if ($msg == '') {
        if (move_uploaded_file($tempname, $folder)) {
            // 有上传文件才更新文件名
            if(!empty($filename)){
                if (isset($_GET['id']) && $_GET['id'] != '') {
                    mysqli_query($link, "update categories set categories='$categories',filename='$filename' where id='$id'");
                } else {
                    mysqli_query($link, "insert into categories(categories,filename,status) values('$categories','$filename','1')");
                }
            }else{
                // 无上传文件只更新分类名
                mysqli_query($link, "update categories set categories='$categories' where id='$id'");
            }
            header('location:categories.php');
            die();
        } else {
            $msg = "Failed to upload image";
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:18:03