试图将数据传递给 ajax 函数,但不能
trying to pass data into ajax function, But can't
如何将这两个变量发送到 ajax,以便在 upload.php 页面中使用。
我就是这么试的。
<?php
if (!isset($_GET['lcid']) || $_GET['lcid'] == NULL) {
echo "<script>window.location = 'insurt-documents.php';</script>";
} else {
$id = $_GET['lcid'];
}
?>
var error_images = '';
var form_data = new FormData();
var files = $('#multiple_files')[0].files;
if(files.length > 15)
{
error_images += 'You can not select more than 15 files';
}
else ............
但是相关代码是...
var id = "<?php echo $id ?>";
$.ajax({
url:"upload.php",
// data: {id, form_data},
data: {id : id, 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();
}
});
upload.php
的一些代码
$id = $_POST['id'];
$query = "
INSERT INTO tbl_image (postid, image_name, image_description)
VALUES ('".$id."', '".$file_name."', '')
";
有我的作品,但没有运行。请有人纠正我。
谢谢。
data: {id : id, form_data}
真的没有意义。你不应该把一个 FormData
对象放在一个对象中,这个对象在发送到服务器时会被字符串化,因为你已经将 processData
设置为 false
。它会简单地将 [object Object]
输出到服务器(演示:https://jsfiddle.net/qe1o352p/ - 观看浏览器中的网络工具即可看到)。
更复杂的是,您甚至还没有在对象内命名表单数据 属性,因此 PHP 将无法找到任何表单数据并将其放入 $_POST
或 $_FILES
个数组。
相反,将 id
作为 属性 添加到 FormData 对象会更有意义:
var form_data = new FormData();
form_data.append("id", "<?php echo $id ?>");
...
$.ajax({
url:"upload.php",
data: form_data,
...
工作版本演示:https://jsfiddle.net/qe1o352p/1/(再次观看网络工具,与原始版本相比有何不同。)
另请参阅 以供参考。
P.S。 警告:您的 PHP/mysqli 代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 http://bobby-tables.com 给出了风险的解释,以及一些如何使用 PHP / mysqli 安全地编写查询的示例。 从不 将未经处理的数据直接插入您的 SQL。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
https://phpdelusions.net/mysqli also contains good examples of writing safe SQL using mysqli. See also the mysqli documentation and this: How can I prevent SQL injection in PHP?。参数化您的查询还将大大降低由于未转义或错误引用的输入值而导致意外语法错误的风险。
如何将这两个变量发送到 ajax,以便在 upload.php 页面中使用。
我就是这么试的。
<?php
if (!isset($_GET['lcid']) || $_GET['lcid'] == NULL) {
echo "<script>window.location = 'insurt-documents.php';</script>";
} else {
$id = $_GET['lcid'];
}
?>
var error_images = '';
var form_data = new FormData();
var files = $('#multiple_files')[0].files;
if(files.length > 15)
{
error_images += 'You can not select more than 15 files';
}
else ............
但是相关代码是...
var id = "<?php echo $id ?>";
$.ajax({
url:"upload.php",
// data: {id, form_data},
data: {id : id, 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();
}
});
upload.php
的一些代码 $id = $_POST['id'];
$query = "
INSERT INTO tbl_image (postid, image_name, image_description)
VALUES ('".$id."', '".$file_name."', '')
";
有我的作品,但没有运行。请有人纠正我。 谢谢。
data: {id : id, form_data}
真的没有意义。你不应该把一个 FormData
对象放在一个对象中,这个对象在发送到服务器时会被字符串化,因为你已经将 processData
设置为 false
。它会简单地将 [object Object]
输出到服务器(演示:https://jsfiddle.net/qe1o352p/ - 观看浏览器中的网络工具即可看到)。
更复杂的是,您甚至还没有在对象内命名表单数据 属性,因此 PHP 将无法找到任何表单数据并将其放入 $_POST
或 $_FILES
个数组。
相反,将 id
作为 属性 添加到 FormData 对象会更有意义:
var form_data = new FormData();
form_data.append("id", "<?php echo $id ?>");
...
$.ajax({
url:"upload.php",
data: form_data,
...
工作版本演示:https://jsfiddle.net/qe1o352p/1/(再次观看网络工具,与原始版本相比有何不同。)
另请参阅 以供参考。
P.S。 警告:您的 PHP/mysqli 代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 http://bobby-tables.com 给出了风险的解释,以及一些如何使用 PHP / mysqli 安全地编写查询的示例。 从不 将未经处理的数据直接插入您的 SQL。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
https://phpdelusions.net/mysqli also contains good examples of writing safe SQL using mysqli. See also the mysqli documentation and this: How can I prevent SQL injection in PHP?。参数化您的查询还将大大降低由于未转义或错误引用的输入值而导致意外语法错误的风险。