【问题标题】:PHP not process data from multipart/form-data formsPHP 不处理来自 multipart/form-data 表单的数据
【发布时间】:2016-07-13 11:34:19
【问题描述】:

我的网站不处理带有enctype="multipart/form-data" 集的表单中的数据。然而,'php://input' 获取数据,即使php manual 表示它不应该可用于 enctype。我认为可能是某些设置错误,但我不知道可能是哪个设置。

一些代码:

<?php
    var_dump($_REQUEST);
    echo file_get_contents("php://input");
?>
<form id="slideForm" action="" method="post" enctype="multipart/form-data">
    <input type="text" name="test">
    <input type="submit" name="submit" id="submit" value="ADD"/>
</form>

更新

我已经联系了为我的网站托管服务器的公司的支持人员,我们已经解决了这个问题。我不完全确定问题出在哪里,但他们的服务器和 php 有点时髦。我不在 PHP 7.0 或 PHP 5.6 上工作,但如果我使用它们的原生 (PHP 5.5),它可以正常工作。

【问题讨论】:

  • 您是否尝试添加 print_r($_POST);看看你是否收到任何帖子?
  • 是的,我有,但它是空的。
  • 您需要提交您的
    代码和 PHP 代码。不看代码很难找到问题所在
  • 已更新代码。正如我所说,它可能不是代码。
  • @Olof,您的操作属性为空。当您提交时,会加载相同的页面。如果此页面是 index.php,则 $_POST 变量可能会丢失。例如:http:domain.com/ 加载 index.php 但有时(.htaccess 或服务器配置)在重定向时 $_POST 会丢失。尝试更改您的操作属性并明确指定您的文件,例如 action="yourCurrentScript.php"

标签: php forms


【解决方案1】:

我不明白您要发布哪种类型的数据。如果它只是一个测试,你应该只有:

<?php
    var_dump($_POST);
?>
<form id="slideForm" action="" method="post">
    <input type="text" name="test">
    <input type="submit" name="submit" id="submit" value="ADD"/>
</form>

如果你想发布一个文件,你必须有:

<?php
    var_dump($_POST);
?>
<form id="slideForm" action="" method="post" enctype="multipart/form-data">
    <input type="file" name="test">
    <input type="submit" name="submit" id="submit" value="ADD"/>
</form>

确保您能够在您的 php 服务器上发布数据。 检查这些 php 变量:

upload_max_filesize
upload_tmp_dir
file_uploads

【讨论】:

  • 如果您不明白,您可以发表评论。我只使用一个小的 from 的原因是因为调试完整的表单有时会上传一个文件,有时只需要一个 URL。
【解决方案2】:

在大多数情况下,您根本不需要使用此属性。默认值(即,如果您根本不使用此属性)是“application/x-www-form-urlencoded”,这对于几乎任何类型的表单数据都足够了。一个例外是如果您想进行文件上传。在这种情况下,您应该使用“multipart/form-data”。 尝试使用以下代码来回显“测试”数据。

<?php
    var_dump($_REQUEST);
    echo $_REQUEST['test'];
?>

<form id="slideForm" action="" method="post">
    <input type="text" name="test">
    <input type="submit" name="submit" id="submit" value="ADD"/>
</form>

【讨论】:

    【解决方案3】:

    我尝试了您的代码,它按预期工作: $_REQUEST 已正确填充,php-input 为空。

    考虑到您的代码看起来不错,并且它在我的服务器上按预期工作,我建议您检查您的 .htacces(或等效项)的过滤器/重写模块,甚至可能是服务器配置设置甚至页面编码。

    99% 不是代码本身。

    【讨论】:

      【解决方案4】:
      <?php
          // File data will display here
          print_r($_FILES);
          // OR you can write with condition
          if($_FILES['test']){
             print_r($_FILES);
          }
      ?>
      <form id="slideForm" action="" method="post" enctype="multipart/form-data">enter code here
          <input type="file" name="test">
          <input type="submit" name="submit" id="submit" value="ADD"/>
      </form>
      

      【讨论】:

      • 我在更新中写道,问题已部分解决。这是 web-hotel 的解析问题。
      【解决方案5】:

      当您发送标头Content-Type:multipart/form-data; 时,PHP 会将请求中的数据解析为$_POST$_FILES 并清除输入缓冲区。为了读取输入缓冲区,您应该删除该标头。

      【讨论】:

        猜你喜欢
        • 2014-09-10
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        • 2017-05-28
        • 2012-10-01
        • 2017-12-22
        • 2017-11-07
        • 2014-10-27
        相关资源
        最近更新 更多