PHP文件上传重命名并存储文件名至数据库功能报错求助
修复PHP文件上传与数据库存储问题
嘿,我帮你看看这个文件上传的问题,你的代码里有几个关键的小错误,咱们一个个捋清楚,把功能修复好:
问题点排查
- 错误获取上传文件:你用
$_POST['file']来拿上传的文件,但PHP里上传文件的信息是存在$_FILES超全局数组里的,$_POST只能处理普通文本字段,根本拿不到文件数据。 - 扩展名获取方式不对:
$file->extension()是Laravel框架里的文件对象方法,但你现在用的是原生PHP环境,得用原生函数来提取扩展名。 - 文件移动函数用错了:
move(base_path('cv'), $filename)也是Laravel的语法,原生PHP要靠move_uploaded_file(),而且得传入文件的临时存储路径和完整目标路径。 - SQL注入风险:直接把变量拼进SQL语句里,不仅不安全,还可能因为特殊字符导致SQL执行失败。
- 缺少错误检查:没判断文件是否上传成功、移动是否成功,出问题了根本不知道哪环节出错。
修正后的完整代码
表单代码(保持不变,可按需优化)
<form method="POST" enctype="multipart/form-data"> <input type="file" name="file" required> <!-- 可选:添加文件大小限制,比如5MB --> <!-- <input type="hidden" name="MAX_FILE_SIZE" value="5242880"> --> <input type="submit" name="job_post" value="Submit"> </form>
PHP处理代码
<?php // 假设$con已经是你创建好的有效数据库连接 if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['job_post'])) { // 先检查文件上传是否有错误 if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) { die("文件上传出错啦,错误码:" . $_FILES['file']['error']); } // 生成新文件名的函数,适配原生PHP function getFileName($file) { // 从原文件名里提取扩展名 $extension = pathinfo($file['name'], PATHINFO_EXTENSION); // 用日期时分秒生成唯一文件名 return date('mdhms') . '.' . $extension; } $uploadedFile = $_FILES['file']; $newFileName = getFileName($uploadedFile); $targetDir = './cv/'; // 目标文件夹路径,确保存在且有写权限 $targetFullPath = $targetDir . $newFileName; // 移动临时文件到目标文件夹 if (move_uploaded_file($uploadedFile['tmp_name'], $targetFullPath)) { // 用预处理语句插入数据库,避免SQL注入 $stmt = mysqli_prepare($con, "INSERT INTO applications (cv, flag) VALUES (?, '1')"); // 绑定参数,s代表字符串类型 mysqli_stmt_bind_param($stmt, "s", $newFileName); mysqli_stmt_execute($stmt); if (mysqli_stmt_affected_rows($stmt) > 0) { echo "简历上传并成功保存到数据库啦!"; } else { echo "简历上传成功,但数据存入数据库失败了..."; // 数据库失败的话,删掉已经上传的文件 unlink($targetFullPath); } mysqli_stmt_close($stmt); } else { echo "文件移动失败,请检查cv文件夹的权限是否正确!"; } } ?>
额外注意事项
- 务必确保
cv文件夹存在,并且服务器的运行用户(比如Apache的www-data、Nginx的nginx)对这个文件夹有写权限,否则文件移不进去。 - 如果你的项目是Laravel框架,可以用框架自带的
Request对象和Storage门面来简化代码,上面的代码是针对原生PHP环境的修正。 - 建议添加文件类型验证,比如只允许
.pdf、.doc、.docx这类简历格式,防止上传恶意文件。
内容的提问来源于stack exchange,提问作者Mujahidur Rahman Mithun IUB
相关产品推荐
相关产品推荐

