PHP检查是否选择了要上载的文件

PHP检查是否选择了要上载的文件,php,post,Php,Post,我有这个表单,我想检查用户是否选择了一个文件 <form action="upload.php" method="POST" enctype="multipart/form-data" > <select name="category"> <option value="cat1" name="cat1">Productfotografie</option> <option value="cat2" na

我有这个表单,我想检查用户是否选择了一个文件

<form action="upload.php" method="POST" enctype="multipart/form-data" >
    <select name="category">
        <option value="cat1" name="cat1">Productfotografie</option>
        <option value="cat2" name="cat2">Portretten</option>
        <option value="cat3" name="cat3">Achitectuur</option>
    </select>
    <input type="file" name="file_upload">
    <input type="submit" name="submit" value="Upload photo">
</form>
但即使我选择了某些内容,也会出现“未选择文件错误”。有线索吗?对不起,我对PHP真的很陌生

编辑:我已尝试替换
$fileupload=$\u文件['file\u upload']
,但它打印了一个空错误

(数组([文件上传]=>数组([名称]=>[类型]=>[tmp\U名称]=> [错误]=>4[大小]=>0)))


当我没有输入文件时?

使用
$\u FILES
数组和
UPLOAD\u ERR\u NO\u file
常量:

if(!isset($_FILES['file_upload']) || $_FILES['file_upload']['error'] == UPLOAD_ERR_NO_FILE) {
    echo "Error no file selected"; 
} else {
    print_r($_FILES);
}
您还可以选中
UPLOAD\u ERR\u OK
,它指示文件是否已成功上载(存在且无错误)

注意:您不能在
$\u FILES['file\u upoad']
数组上使用
empty()
,因为即使没有上传任何文件,数组仍然会被填充,并且
error
元素被设置,这意味着
empty()
将返回
false

,因为自PHP4.1.0以来有可用的$\u文件。此变量保存有关上载文件的信息。所以你应该编码

$fileupload = $_FILES['file_upload'];
if (isset($fileupload)) {
    print_r($_FILES);
} else {
    echo "Error no file selected";     
}

首先,单击提交而不选择文件

  /* check input 'submit' */        
  if (isset($_POST['submit'])) {
    print($_FILES);
  }
结果:

> Array ( > [file_upload] => Array > ( > [name] => > [type] => > [tmp_name] => > [error] => 4 > [size] => 0 > ) > > )
使用而不是
$\u POST
访问上载的文件。@showdev我已尝试替换$fileupload=$\u文件['file\u upload'],但它打印了一个空错误(数组([file\u upload]=>Array([name]=>[type]=>[tmp\u name]=>[error]=>4[size]=>0)))当我没有输入文件时?这是正确的:
如果没有选择要在表单中上载的文件,PHP将把$\u FILES['userfile']['size']返回为0,把$\u FILES['userfile']['tmp\u name']返回为none。
-您确定表单enctype是多部分/表单数据吗。如果未设置,则会显示为空。这是否回答了您的问题-1 empty()将始终返回false,即使没有上载任何文件。我已经尝试了你的代码,但它不起作用。如果我不输入文件,它只打印一个空数组。“数组([file_upload]=>Array([name]=>[type]=>[tmp_name]=>[error]=>4[size]=>0))”谢谢,我在发布之前已经尝试了其他人的建议,他们错了。它不起作用。但是你的代码是有效的!非常感谢你。我是新来的,还在学习,也谢谢你关于empty()的提示:)你太棒了。如果文件类型是多重检查,那么使用empty更可靠
if(!empty($\u FILES['file\u upload']))
或者
if(empty($\u FILES['file\u upload'])
真的谢谢MrCode。。!!感谢您提供这段代码片段,它可能会提供一些即时帮助。通过说明为什么这是一个很好的解决问题的方法,正确地解释它的教育价值,并将使它对未来有类似但不完全相同问题的读者更有用。请在回答中添加解释,并说明适用的限制和假设。 > Array ( > [file_upload] => Array > ( > [name] => > [type] => > [tmp_name] => > [error] => 4 > [size] => 0 > ) > > )
  /* check input submit */
  if (isset($_POST['submit'])) {

    /* check input file_upload on error */
    if (isset($_FILES['file_upload']['error'])) {

      /* check code error = 4 for validate 'no file' */         
      if ($_FILES['file_upload']['error'] == 4) {

        echo "Please select an image file ..";

      }

    }

  }