
本文档旨在指导开发者如何正确地使用 AJAX 将数据(包括文件数据)传递到 PHP 上传脚本。重点在于如何构建 FormData 对象,并通过 AJAX 将其发送到服务器端,以及如何在 PHP 端安全地处理接收到的数据。同时,强调了避免 SQL 注入的重要性,并提供了相关的安全编码建议。
在前端,我们需要使用 FormData 对象来封装要上传的数据,包括文件和其他表单数据。关键在于正确地将数据添加到 FormData 对象中。
var id = "<?php echo $id ?>"; // 从 PHP 传递过来的 ID
var form_data = new FormData();
form_data.append("id", id); // 将 ID 添加到 FormData
var files = $('#multiple_files')[0].files;
// 检查文件数量
if (files.length > 15) {
alert('You can not select more than 15 files');
return; // 停止上传
}
// 将文件添加到 FormData
for (var i = 0; i < files.length; i++) {
form_data.append("multiple_files[]", files[i]); // 允许上传多个文件
}说明:
使用 $.ajax() 函数发送 FormData 对象到服务器。
立即学习“PHP免费学习笔记(深入)”;
$.ajax({
url: "upload.php",
data: form_data,
method: "POST",
contentType: false,
cache: false,
processData: false,
beforeSend: function() {
$('#error_multiple_files').html('<br /><label class="text-primary">Uploading...</label>');
},
success: function(data) {
$('#error_multiple_files').html('<br /><label class="text-success">Uploaded</label>');
load_image_data();
},
error: function(jqXHR, textStatus, errorThrown) {
console.error("AJAX Error:", textStatus, errorThrown);
$('#error_multiple_files').html('<br /><label class="text-danger">Upload Failed</label>');
}
});关键配置:
在 PHP 端,使用 $_POST 和 $_FILES 数组来接收数据。
<?php
$id = $_POST['id'];
$files = $_FILES['multiple_files'];
// 检查是否有文件上传
if (isset($files) && is_array($files['name'])) {
// 循环处理每个上传的文件
for ($i = 0; $i < count($files['name']); $i++) {
$file_name = $files['name'][$i];
$file_tmp = $files['tmp_name'][$i];
$file_error = $files['error'][$i];
// 检查上传是否出错
if ($file_error === UPLOAD_ERR_OK) {
// 移动文件到指定目录
$destination = 'uploads/' . $file_name; // 确保 uploads 目录存在
if (move_uploaded_file($file_tmp, $destination)) {
// 文件上传成功,执行数据库操作
// **重要:使用预处理语句防止 SQL 注入**
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 使用预处理语句
$sql = "INSERT INTO tbl_image (postid, image_name, image_description) VALUES (?, ?, '')";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $id, $file_name);
if ($stmt->execute() === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$stmt->close();
$conn->close();
} else {
echo "文件移动失败";
}
} else {
echo "文件上传出错: " . $file_error;
}
}
} else {
echo "没有文件上传";
}
?>说明:
至关重要:永远不要直接将用户输入的数据插入到 SQL 查询语句中。这会导致严重的 SQL 注入漏洞。使用预处理语句 (Prepared Statements) 来防止 SQL 注入。
// 使用预处理语句
$sql = "INSERT INTO tbl_image (postid, image_name, image_description) VALUES (?, ?, '')";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $id, $file_name); // "ss" 表示两个字符串类型参数
if ($stmt->execute() === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$stmt->close();
$conn->close();解释:
通过遵循这些步骤,可以安全、有效地使用 AJAX 将数据(包括文件)上传到 PHP 服务器。
以上就是使用 AJAX 传递数据到 PHP 上传脚本的正确方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号