PHP检查是否有选择上传的文件

时间:2014-10-17 19:50:57

标签: 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" 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代码来测试它

if (empty($_POST) === false) {
    $fileupload = $_POST['file_upload'];
    if (empty($fileupload) === true) { //
            echo "Error no file selected";     
    } else {
        print_r($_FILES);
    }
} 

但我得到&#34;错误没有选择文件&#34;即使我选择了一些东西。任何线索?对不起,我是PHP的新手。

编辑:我已尝试替换$fileupload = $_FILES['file_upload'],但会打印出一个空错误

  

(Array([file_upload] =&gt; Array([name] =&gt; [type] =&gt; [tmp_name] =&gt;   [错误] =&gt; 4 [size] =&gt; 0)))

当我不输入文件时?

3 个答案:

答案 0 :(得分:10)

使用$_FILES数组和UPLOAD_ERR_NO_FILE常量:

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

您还可以查看UPLOAD_ERR_OK,表明文件是否已成功上传(现在且没有错误)。

注意:您不能在empty()数组上使用$_FILES['file_upoad'],因为即使没有上传文件,仍会填充数组并设置error元素,这意味着{{ 1}}将返回empty()

答案 1 :(得分:0)

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

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

结果:

> Array (
>     [file_upload] => Array
>         (
>             [name] => 
>             [type] => 
>             [tmp_name] => 
>             [error] => 4
>             [size] => 0
>         )
> 
> )

[file_upload] [error] = 4 的数组,非null或空格。
代码值= 4,表示UPLOAD_ERR_NO_FILE 如果成功且没有错误,则代码值= 0 检查here
因此使用函数 isset ,而不是为空

  /* 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 ..";

      }

    }

  }

答案 2 :(得分:-2)

根据http://www.php.net,自php 4.1.0起可以获得$ _FILES。此变量保存有关上载文件的信息。所以你应该编码

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