【问题标题】:trying to pass data into ajax function, But can't试图将数据传递给ajax函数,但不能
【发布时间】:2021-12-18 14:07:08
【问题描述】:

如何将这两个变量发送到 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."', '')
   ";

有我的作品,但它没有运行。请有人纠正我。 谢谢。

【问题讨论】:

    标签: php jquery mysql ajax file-upload


    【解决方案1】:

    data: {id : id, form_data} 没有任何意义。您不应该将FormData 对象放在一个对象中,该对象将在发送到服务器时被字符串化,因为您已将processData 设置为false。它只会将[object Object] 输出到服务器(演示:https://jsfiddle.net/qe1o352p/ - 观看浏览器中的网络工具即可查看)。

    更复杂的是,您甚至都没有在对象中命名 formdata 属性,因此 PHP 将无法找到任何 FormData 并将其放入 $_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/(再次观看网络工具,看看与原始版本相比有何不同。)

    另请参阅https://stackoverflow.com/a/10811427/5947043


    附: 警告:您的 PHP/mysqli 代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 http://bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。

    https://phpdelusions.net/mysqli 还包含使用 mysqli 编写安全 SQL 的好例子。另见mysqli documentation 和这个:How can I prevent SQL injection in PHP?。对查询进行参数化还将大大降低由于输入值未转义或引用错误而导致意外语法错误的风险。

    【讨论】:

    • 非常感谢。我已成功听从您的建议。
    猜你喜欢
    • 2011-06-19
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多