Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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
Php 动态创建的HTML文件输入元素不';t post数据_Php_Javascript_Html_File Upload_Dhtml - Fatal编程技术网

Php 动态创建的HTML文件输入元素不';t post数据

Php 动态创建的HTML文件输入元素不';t post数据,php,javascript,html,file-upload,dhtml,Php,Javascript,Html,File Upload,Dhtml,我有一个使用document.createElement动态创建的表单。组件以相同的方式创建。表单用于将文件上载到PHP脚本,提交时在表单的target属性指定的iframe中加载响应 不幸的是,服务器接收到一个空的$_FILES数组,当我检查POST请求时,我发现请求中没有包含文件数据。如果我使用Google Chrome developer工具来编辑动态创建的表单(在这个过程中,我只需编辑,然后完全不更改任何代码),表单提交之后就可以完美地工作,发送相关的文件数据 因此,这让我意识到用htm

我有一个使用document.createElement动态创建的表单。组件以相同的方式创建。表单用于将文件上载到PHP脚本,提交时在表单的target属性指定的iframe中加载响应

不幸的是,服务器接收到一个空的$_FILES数组,当我检查POST请求时,我发现请求中没有包含文件数据。如果我使用Google Chrome developer工具来编辑动态创建的表单(在这个过程中,我只需编辑,然后完全不更改任何代码),表单提交之后就可以完美地工作,发送相关的文件数据

因此,这让我意识到用html构建表单并没有什么问题,因为它在不改变任何内容的情况下工作。这让我相信浏览器不喜欢我动态创建文件输入元素

为完整起见,以下是动态生成的表单:

<form method="POST" action="includes/uploadPic.php" 
      enctype="multipart/form-data" target="fileResponse">
  <input type="file" name="pic">
  <input type="submit" value="Upload">
</form> 
试试这个:

var form = document.createElement("form");
var fileUpload  = document.createElement("input");
var uploadBut   = document.createElement("input");

form.method = "POST";
form.action = "includes/uploadPic.php";
form.enctype = "multipart/form-data";
form.target = "fileResponse"; /* I think you are trying to submit this from in an iframe */
fileUpload.type = "file";
fileUpload.name = "pic";
uploadBut.type = "submit";
uploadBut.value = "Upload";
form.appendChild(fileUpload);
form.appendChild(uploadBut);
dlgContent.appendChild(form);

如果将
表单
标记放在
div
标记中,它不会将动态创建的元素发布到服务器。但是,如果您将它放在
div
table
标记之外,它就会工作。

您没有将动态创建的表单添加到另一个元素中,是吗?您是否查看了实际的HTTP事务以查看从浏览器发送的内容?Firefox()至少有一个插件可以显示浏览器中的每个HTTP事务,并让您基本上检查所有内容。@AndrewR不是嵌套表单@Pointy我说过我检查了POST请求。一切似乎都是正确的,只是好像文件输入被忽略了。你能发布生成表单的代码吗?我已经添加了表单生成脚本
var form = document.createElement("form");
var fileUpload  = document.createElement("input");
var uploadBut   = document.createElement("input");

form.method = "POST";
form.action = "includes/uploadPic.php";
form.enctype = "multipart/form-data";
form.target = "fileResponse"; /* I think you are trying to submit this from in an iframe */
fileUpload.type = "file";
fileUpload.name = "pic";
uploadBut.type = "submit";
uploadBut.value = "Upload";
form.appendChild(fileUpload);
form.appendChild(uploadBut);
dlgContent.appendChild(form);