使用$_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
相关产品推荐
相关产品推荐

