24

我正在尝试组合一个包含两个字段的 HTML POST 表单——一个文件上传和一个文本字段。由于表单具有用于文件上传的 multipart/form-data 类型,因此我无法通过普通的 PHP $_POST 变量访问文本字段。那么如何使用 PHP 获取表单中的文本字段呢?

根据要求,这里有一些代码,基本上直接取自 Andrew:

<html>
    <body>
        <form action="test2.php" method="post" enctype="multipart/form-data">
            Name: <input type="text" name="imageName" />
            Image: <input type="file" name="image" />
            <input type="submit" value="submit" />
        </form>
    </body>
</html>

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>

这就是整个测试文件。如果我删除 enctype,我可以获得 POST 编辑的数据,但当然不是文件。使用 enctype 作为 multipart/form-data,我可以获取文件,但无法从 POST 编辑的数据中获取。

这是 enctype 的输出:

array(5) {
  ["name"]=>
  string(34) "testing.png"
  ["type"]=>
  string(0) ""
  ["tmp_name"]=>
  string(0) ""
  ["error"]=>
  int(1)
  ["size"]=>
  int(0)
}

没有:

testing

NULL

两次完全相同的输入。

4

7 回答 7

33

文件上传通过$_FILES. 其他一切都通过$_POST(当然假设您的 HTML 表单的method属性设置为"post")。

于 2009-07-02T16:56:02.287 回答
9

检查您的帖子限制。我快要疯了,想弄清楚是什么原因造成的。快速检查 Apache 错误日志显示帖子内容长度超过了限制。提高限制后,发布数据可用。

于 2011-04-20T20:24:07.807 回答
5

$_POST应该适用于文本字段。您将需要使用$_FILES实际文件。给定以下 HTML:

<html>
  <body>
    <form action="self.php" method="post" enctype="multipart/form-data">
      Name: <input type="text" name="imageName" />
      Image: <input type="file" name="image" />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

您可以通过以下方式访问这些字段:

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>
于 2009-07-02T16:56:43.940 回答
1

您的代码没有问题;可能是服务器配置的问题。

<form action="" method="post" enctype="multipart/form-data"> 
 Name: <input type="text" name="imageName"> 
 Image: <input type="file" name="image"> 
 <input type="submit" value="submit"> 
</form> 

<?php var_dump($_POST, $_FILES); ?> 

脚本:http
://sandbox.phpieceofcake.com/upload/1246558881125336.php 来源:http ://sandbox.phpieceofcake.com/upload/1246558881125336.phps

于 2009-07-02T18:38:25.697 回答
1

我遇到了与开头所示相同的问题。尝试加载小于 1MB 的文件,如果您已经能够上传文件,那么您的问题是 upload_max_filesize 和 post_max_size 值增加了这些值,然后重试。这是我的问题的解决方案。

于 2016-02-16T19:08:14.820 回答
-1

[2010-02-13 10:57 UTC] sudeshkmr 在 yahoo dot com

我遇到了同样的问题,但没有任何效果。我已经在 Windows Vista 上的 Apache 2.2、PHP 5.3 上进行了测试。我还在 Ubuntu (Karmic) 上使用 Apache 2.2 和 PHP 5.3 进行了测试。我还使用 nGinX 0.8 和 PHP 5.3 进行了测试。

然后我找到了解决方法。action="" 参数不应是您拥有文件上传表单的脚本页面本身。例如,您有一个带有上传表单的页面 index.php。

action="upload.php" <-------- 这个页面必须不同于文件上传表单页面,它适用于 PHP 的所有配置!

不要用于 action 参数。

于 2010-05-27T22:32:06.910 回答
-3

您可以使用 chrome rest 客户端扩展或通过此应用上传多部分数据来检查您的网络服务是否正常工作 - http://itunes.apple.com/us/app/rest-client/id503860664?ls=1&mt=8

于 2012-02-29T07:43:11.107 回答