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

使用$_FILES函数无法将图片文件上传至指定目录问题求助

问题原因

  • 上传表单缺少文件上传必填的enctype="multipart/form-data"属性,服务器无法识别文件上传请求,不会将文件写入临时目录
  • $_FILES内置数组的键名使用错误,没有album_name这个自定义键,PHP默认提供的临时文件路径键为tmp_name,原始文件名为name
  • 错误从$_POST中获取文件字段的值,文件类型的表单字段不会传入$_POST数组,仅会保存在$_FILES中
  • 直接拼接用户输入到SQL语句,存在严重的SQL注入风险
  • 缺少文件移动成功的判定逻辑,即使文件上传失败也会写入数据库并跳转提示成功,无法排查问题

修复代码

1. fotogalerije.php表单部分修改

找到form标签,补充enctype属性:

<form method="post" action="add-album.php" enctype="multipart/form-data">

其余html代码无需修改。

2. add-album.php完整修复代码

<?php
include "config.php";

if (isset($_POST["submit_album"])) {
    // 转义用户输入避免SQL注入
    $album = mysqli_real_escape_string($conn, $_POST["album_name"]);
    // 从FILES中获取文件信息
    $photo_name = $_FILES["album_prikazna"]["name"];
    $photo_tmp_path = $_FILES["album_prikazna"]["tmp_name"];
    $upload_target = "show/".$photo_name;

    // 先移动文件,成功后再写入数据库,保证数据一致性
    if (move_uploaded_file($photo_tmp_path, $upload_target)) {
        $add_album = $conn->query("INSERT INTO gallery_albums (album_name, album_prikazna) VALUES ('$album', '$upload_target')");
        header("Location: fotogalerije.php?add_album_action=successfull");
        exit;
    } else {
        // 可自行补充上传失败的提示逻辑
        header("Location: fotogalerije.php?add_album_action=failed");
        exit;
    }
}
?>

额外注意事项

  • 提前确认show目录的权限是否正确,需要给web进程写入权限
  • 建议对上传的文件名做重命名处理,避免同名文件覆盖、特殊字符导致的路径问题
  • 建议增加文件类型、大小校验,避免上传非图片文件或过大文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:05