【问题标题】:file upload doesn't work in HTML form文件上传在 HTML 表单中不起作用
【发布时间】:2012-04-01 02:39:19
【问题描述】:

我正在使用一个简单的表单来上传 5 个文件:

<form enctype="multipart/form-data" action="openaccount.php" method="post">
<h4>Proof of Identity of Account Operator 1</h4>

<p>Government issued Photo ID to verify identity:
<br/><input name="tidentity_proof" type="file" />

<p>Documentation to verify permanent residential address:
<br/><input name="taddress_proof" type="file" />

<h4>Proof of Identity of Account Operator 2 (if any)</h4>

<p>Government issued Photo ID to verify identity:
<br/><input name="tidentity_proof2" type="file" />

<p>Documentation to verify permanent residential address:
<br/><input name="taddress_proof2" type="file" />

<h4>Signed Fund Agreement</h4>
<p>Choose a file to upload:
<br/><input name="tagreement" type="file" />

<input type="submit" name="submit" value="Submit" />

</form>

由于 5 个文件都是必填的,所以我在提交表单时检查一下是否所有 5 个文件都已上传:

if($_FILES['tidentity_proof']['name']=="" || $_FILES['tidentity_proof2']['name']=="" || $_FILES['taddress_proof']['name']=="" || $_FILES['taddress_proof2']['name']=="" || $_FILES['tagreement']['name']==""){
    $_SESSION['message'].="You must upload files as identity proof.";
}

如果我为所有 5 个字段选择文件,前 4 个可以正常工作,但第 5 个不能。因此,如果我执行echo $_FILES['tagreement']['name'];,我会得到一个空字符串,如果我对所有其他人执行相同操作,则文件名会正确打印出来。我在这里错过了什么?

编辑:“tagreement”字段在列表中的最后一个并不重要,我尝试将它移到其他字段之前,但它仍然不起作用。

print_r($_FILES):

Array (
    [tidentity_proof] => Array (
        [name] => cathypersons_deerdoe.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/phpcfeBC9
        [error] => 0 [size] => 40299
    )
    [taddress_proof] => Array (
        [name] => cheetah20cubs.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/phpRp4qu1
        [error] => 0 [size] => 84873
    )
    [tidentity_proof2] => Array (
        [name] => cheetah20cubs.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/phpCpGkmT
        [error] => 0
        [size] => 84873
    )
    [taddress_proof2] => Array (
        [name] => cathypersons_deerdoe.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/phpBUBheL
        [error] => 0
        [size] => 40299
    )
)

【问题讨论】:

  • print_r($_FILES),你得到了什么?
  • 另外,关闭您的&lt;p&gt; 标签。虽然使用 HTML5 在技术上您不必这样做,但它确实会弄乱您的 HTML。
  • @Brad: Array ([tidentity_proof] => Array ([name] => cathypersons_deerdoe.jpg [type] => image/jpeg [tmp_name] => /tmp/phpcfeBC9 [error] => 0 [size] => 40299) [taddress_proof] => Array ([name] => cheetah20cubs.jpg [type] => image/jpeg [tmp_name] => /tmp/phpRp4qu1 [error] => 0 [size] = > 84873 ) [tidentity_proof2] => 数组 ( [name] => cheetah20cubs.jpg [type] => image/jpeg [tmp_name] => /tmp/phpCpGkmT [error] => 0 [size] => 84873 ) [taddress_proof2 ] => 数组 ( [name] => cathypersons_deerdoe.jpg [type] => image/jpeg [tmp_name] => /tmp/phpBUBheL [error] => 0 [size] => 40299 ) )
  • 您上传的文件是否比 PHP 配置的文件大?
  • 不是 Alex,它们是图片,不超过 100kb。

标签: php html forms file upload


【解决方案1】:

看起来你的字段名在显示中,和检查中的变量名不一致。

您的第二段代码应该是:

if($_FILES['tidentity_proof']['name']=="" || $_FILES['taddress_proof']['name']=="" || $_FILES['tidentity_proof2']['name']=="" || $_FILES['taddress_proof2']['name']=="" || $_FILES['tagreement']['name']==""){
    $_SESSION['message'].="You must upload files as identity proof.";
}

【讨论】:

  • 抱歉,不用管工作字段的名称,我一直在更改这些名称,因为其他原因 - 有问题的字段名称在我发布的代码中是正确的。
  • 嗯,我可以通过本地测试确认您的表单工作正常。我没有对此进行测试,但它是有道理的。
  • @robert 您的代码中包含 tcertificate 和 tsig。那是哪里?
  • @phpmeh 感谢您指出,tcertificate 和 tmeh 因其他原因被重命名,无论这些原因,有问题的字段都不起作用。我已经尝试完全从条件中删除其他字段。
  • @robert 根据您的print_r($_FILES) 您的字段名称与您正在检查的名称不匹配。
猜你喜欢
  • 2022-01-07
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 2016-05-01
  • 2013-06-23
相关资源
最近更新 更多