Ajax文件上传后无法调用类将文件信息存入数据库求助
解决Ajax上传后无法存入数据库的问题
我看了你代码里的几个核心问题,这应该就是你没法把文件详情存入数据库的原因,咱们一步步来修正:
1. 先开启错误报告,揪出隐藏问题
你开头写了error_reporting(0);,这会把所有错误(比如数据库连接失败、SQL语法错误)都藏起来,根本没法排查问题。先把这行改成:
error_reporting(E_ALL); ini_set('display_errors', 1);
这样就能看到具体的错误提示,帮你快速定位哪里出问题了。
2. 调整数据库连接的加载顺序
你在处理完上传逻辑后才include'../../header.php';,如果header.php里包含了数据库连接的代码,那调用$sam->musicUpload的时候,数据库连接还没初始化,肯定会失败。赶紧把数据库连接的加载移到最开头:
error_reporting(E_ALL); ini_set('display_errors', 1); include'../../header.php'; // 先加载数据库连接,再处理业务逻辑 if (isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") { // 你的上传逻辑... }
3. 给表单字段补上name属性
你HTML里的输入框只有id没有name,比如:
<input type="text" placeholder="Database Name" id='music_name'/>
PHP的$_POST是根据name属性来获取表单值的,没有name的话,PHP根本拿不到这些数据。给每个需要传递的字段加上name:
<input type="text" placeholder="Database Name" id='music_name' name='music_name'/> <input type="text" placeholder="Producer" id="music_producer" name="music_producer" /> <input type="text" placeholder="Artist Name" id="music_artist" name="music_artist"/> <input type="text" placeholder="Album Name" name="music_album"/> <textarea name="music_desc" placeholder="Music Description" id='music_desc'></textarea> <input class="form-control" type="text" id="filename" name="filename" />
4. 确保Ajax正确提交所有字段
你的processUpload.js里,要用FormData来处理文件和表单字段的提交,不然普通的序列化方式没法上传文件。参考这个写法:
$("#btn").click(function(){ var formData = new FormData($("#myform")[0]); $.ajax({ url: "你的PHP处理文件路径", type: "POST", data: formData, contentType: false, // 必须设为false,让浏览器自动处理Content-Type processData: false, // 必须设为false,避免jQuery把FormData转成字符串 xhr: function() { var xhr = new window.XMLHttpRequest(); xhr.upload.addEventListener("progress", function(evt) { if (evt.lengthComputable) { var percentComplete = evt.loaded / evt.total; percentComplete = parseInt(percentComplete * 100); $(".myprogress").width(percentComplete+'%').text(percentComplete+'%'); } }, false); return xhr; }, success: function(response){ $(".msg").html(response); $(".myprogress").width('0%').text('0%'); } }); });
5. 正确调用数据库插入方法
上传成功后,把收集到的所有参数传给你的musicUpload方法,确保参数和方法定义一致:
if (move_uploaded_file($tmp, $path . $file_name.'.'.$ext)) { // 收集需要存入数据库的所有信息 $musicName = $_POST['music_name']; $producer = $_POST['music_producer']; $artist = $_POST['music_artist']; $album = $_POST['music_album']; $desc = $_POST['music_desc']; $filePath = $path . $file_name.'.'.$ext; $fileSize = $size; $fileFormat = $ext; // 调用你的数据库插入方法 $result = $sam->musicUpload($musicName, $producer, $artist, $album, $desc, $filePath, $fileSize, $fileFormat); // 反馈结果,方便调试 if($result){ echo "文件上传成功,已存入数据库"; }else{ echo "文件上传成功,但存入数据库失败"; } } else { echo "文件上传失败"; }
额外检查点
- 确认
$sam实例在header.php里已经正确初始化(比如$sam = new YourFileUploadClass();) - 检查
musicUpload方法里的SQL语句,有没有拼写错误、字段名和数据库表是否匹配,最好用预处理语句防注入 - 确认数据库用户有写入权限,表结构和你要插入的字段一致
按照这些步骤修改后,应该就能解决问题了。如果还有错误,看一下开启错误报告后输出的具体信息,就能快速定位到问题所在。
内容的提问来源于stack exchange,提问作者Intuitive Skamod Anthony
相关产品推荐
相关产品推荐

