【问题标题】:HTML Form With Enctype Breaks $_POST Data带有 Enctype 的 HTML 表单会破坏 $_POST 数据
【发布时间】:2015-03-17 00:31:21
【问题描述】:

现在有点令人困惑的问题。我正在尝试设置一个表单来上传视频。

这是表格:

        <form role="form" action="upload.php" method="post" enctype="multipart/form-data">
            <input type="hidden" name="upload" value="1">
            <div class="row">
                <div class="col-xs-6">
                    <span class="btn btn-lg btn-primary btn-block btn-file">
                        Browse... <input type="file" name="file">
                    </span>
                </div><!-- col-xs-6 -->

                <div class="col-xs-6">    
                    <h4 class="feedback-field text-centered">No file selected.</h4>
                </div><!-- col-xs-6 -->
            </div><!-- row -->

            <div class="row">
                <h4 class="error-field text-centered"></h4>
            </div><!-- row -->

            <div class="row">
                <div class="col-xs-4"></div>

                <div class="col-xs-4">
                    <input type="submit" name="submit" class="btn btn-primary btn-lg btn-block upload-btn disabled" value="Upload">
                </div>

                <div class="col-xs-4"></div>
            </div>
        </form>

这里是upload.php上的相关PHP:

    if(isset($_POST['upload'])){

        // do things with the file here

    } else {

        echo "No file found.";
    }

不幸的是,这个表单似乎没有将任何文件传递到下一页。

如您所见,表单有一个“enctype”值,这是上传视频时所必需的。但是,当表单具有该值时,它会中断,并且页面“upload.php”将不会收到任何 $_POST 数据(即,它将显示“未找到文件。”消息。当然,没有 enctype , $_FILES 为空。

事情是这样的:我试过改变这个:

if(isset($_POST['upload'])){

到这里:

if(isset($_FILES['file'])){

在这种情况下,我还会收到“未找到文件”。信息。因此,似乎无论表单是否具有“enctype”属性,它都只是拒绝将文件传递给“upload.php”。

有人可以帮我吗?我或多或少迷路了。 Google 并没有为我提供任何好的答案。

编辑:不知何故,这个问题在发布后的几秒钟内就被否决了——比任何人回答它的速度都要快。有人可能想调查这些明显具有欺诈性的反对票。

【问题讨论】:

  • 在尝试处理文件上传之前,您没有检查$_FILES['file']['error'] 数组是否有错误。您可能会发现 PHP 参数 upload_max_filesizepost_max_size 限制了允许上传的文件大小,并在错误数组中生成了 error code = 1
  • upload.php 与此表单是同一页面吗?
  • 我现在会检查 RiggsFolly,但请记住,我还检查了是否只有顶级 '$_FILES['file'] 存在,但它不存在。鬼,不,upload.php 是一个新页面。
  • $_FILES['file']['error'] 未设置。 Fred:我看不出这有什么帮助,因为文件甚至没有进入第二页。

标签: php html forms


【解决方案1】:

检查您的 php.ini 设置:

file_uploads 开启 开启

max_file_uploads 20 20

post_max_size 8M 8M

upload_max_filesize 2M 2M

max_execution_time 18000 300

max_file_uploads 20 20

最大输入时间 300 300

memory_limit 256M 1024M

【讨论】:

  • 这应该是个评论。
  • file_uploads 开启,max_file_uploads 为 20,post_max_size 为 3m(我将其更改为 8 并再次尝试),upload_max_filesize 为 64m,max_execution_time 为 120(可能是问题吗?),max_file_uploads 为还是20,max_input_time有-1、60、60三个值,memory_limit是128m。
  • 不同意文件上传的最常见原因是:post_max_size 8M 8M upload_max_filesize 2M 2M
  • 将post_max_size改为8m后尝试,同样的问题。
  • 尝试上传一个小文件来测试脚本。
【解决方案2】:

给表格起个名字

<form role="form" action="upload.php" name="MyUpload" method="post" enctype="multipart/form-data">

更改提交输入的名称。

<input type="submit" name="VidUpload" class="btn btn-primary btn-lg btn-block upload-btn disabled" value="Upload">

检查提交是否已提交

if(isset($_POST['VidUpload'])){

  // do things with the file here
  echo "Form Submitted.";

} else {
  echo "No file found.";
}

【讨论】:

  • 很遗憾,没有,仍然“找不到文件。”。
【解决方案3】:

对于遇到同样问题的任何人,请查看此页面:

WAMP Uploading large File

问题给出了您需要在 php.ini 文件中更改的值以允许上传更大的文件(这就是破坏表单的原因)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多