Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从FormData获取PHP中的数据和文件_Php_Ajax_File Upload_Multiple File Upload - Fatal编程技术网

如何从FormData获取PHP中的数据和文件

如何从FormData获取PHP中的数据和文件,php,ajax,file-upload,multiple-file-upload,Php,Ajax,File Upload,Multiple File Upload,我正在尝试通过Ajax将数据(输入文本、下拉列表等)和文件发送到PHP文件。我使用此函数添加名为Action的额外参数。操作可以是这些文本中的一些:“添加”、“编辑”、“读取”和“删除”(crud选项)。请参见下面的脚本: function recordActions(action_name, id) { //id = (typeof id == "undefined") ? '' : id; var frm = document.getElementById(action_name

我正在尝试通过Ajax将数据(输入文本、下拉列表等)和文件发送到PHP文件。我使用此函数添加名为Action的额外参数。操作可以是这些文本中的一些:“添加”、“编辑”、“读取”和“删除”(crud选项)。请参见下面的脚本:

function recordActions(action_name, id) {
  //id = (typeof id == "undefined") ? '' : id;

  var frm = document.getElementById(action_name + '_form');
  var form_data = new FormData();

  form_data.append('action', action_name);
  form_data.append('fd', frm);

  $.ajax({
          type: 'post',
          dataType: 'json',
          url: '<?php echo FILENAME_USERS_ACTIONS; ?>',
          data: form_data, 
          cache: false,
          processData: false,
          contentType: false,
          success:
            if (data.action == 'add' || data.action == 'edit') {
                $("#" + action_name + '_form')[0].reset();
                $("#" + action_name + '_div').slideUp();
            }
            showWeekAgenda();

            }          
      });

      // esta línea evita que la página se refresque dando a Cancelar la visita y evita que salga Error en Success de Arriba
      if (action_name == 'cancel') return false; 
    }
然后,我在PHP中添加了一些代码以查看参数及其值:

print_r($_POST);
print_r($_FILES);

echo '<br>Post: ' . $_POST['fd'];
print\r($\u POST);
打印(美元文件);
回显“
Post:”$_POST['fd'];
但是我没有什么可以帮助我的

Array
(
    [action] => actadd
    [fd] => [object HTMLFormElement]
)
Array
(
)
<br>Post: [object HTMLFormElement]
数组
(
[操作]=>actadd
[fd]=>[object HTMLFormElement]
)
大堆
(
)

Post:[对象HTMLFormElement]
有人知道如何访问fd中的任何值吗?fd应该有我的输入文本、下拉列表、文本区域等的值

下面是这个问题的答案:我们可以将所有HTML控件放在一个FormData中

提前谢谢

创建对象时,应将表单传递给构造函数,以使其填充表单值。然后,您可以将
操作
值附加到该结果:

var frm = document.getElementById(action_name + '_form');
var form_data = new FormData(frm);
form_data.append('action', action_name);

当你这样做的时候,你应该会看到
$\u POST
$\u文件在你的PHP代码中正确填充。

尼克,你说得对!非常感谢。为什么会这样?哪个是将表单传递给构造函数而不是使用append的区别?@Oz rod当您使用
append
时,表单作为对象添加到发布的数据中,PHP不会解析它,因为它不在发布数据的顶层。因此,您可以在您的
$\u帖子中看到
[fd]=>[object HTMLFormElement]
。当您将表单传递给构造函数时,表单的每个元素都会添加到顶层发布的数据中,因此PHP会在收到表单时对其进行解析。
var frm = document.getElementById(action_name + '_form');
var form_data = new FormData(frm);
form_data.append('action', action_name);