2014-10-17 43 views
4

我有這種形式,我想檢查用戶是否選擇了一個文件。PHP檢查是否有文件選擇上傳

<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); 
    } 
} 

但我得到的「錯誤沒有選擇的文件」就算我選擇的東西。任何線索?對不起,我真的是PHP新手。編輯:我已經嘗試更換$ fileupload = $ _FILES ['file_upload']但它打印一個空的錯誤(數組([file_upload] =>數組([名稱] => [類型] => [tmp_name] = > [error] => 4 [size] => 0)))當我不輸入文件?

+3

使用['$ _FILES'(HTTP:// PHP。 net/manual/en/reserved.variables.files.php)而不是'$ _POST'來訪問上傳的文件。 – showdev 2014-10-17 19:53:27

+0

@showdev我已經嘗試更換$ fileupload = $ _FILES ['file_upload']但它打印出一個空錯誤(Array([file_upload] => Array([name] => [type] => [tmp_name] => [error ] => 4 [size] => 0)))當我不輸入文件? – Mae 2014-10-17 20:06:47

+0

這是正確的:'如果在表單中沒有選擇上傳文件,PHP將返回$ _FILES ['userfile'] ['size'] 0和$ _FILES ['userfile'] ['tmp_name']作爲none。 ' - [php.net](http://php.net/manual/en/features.file-upload.post-method.php) – showdev 2014-10-17 20:09:06

回答

6

使用$_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這表明如果文件上傳成功(目前沒有錯誤)。

注意:您不能$_FILES['file_upoad']陣列上使用empty(),因爲即使沒有文件上傳,陣列仍然填充和error元素設置,這意味着empty()將返回false

+0

謝謝,我已經嘗試了其他人發佈之前建議的內容,他們是錯誤的。這是行不通的。但你的代碼工作!非常感謝你。我是新的,仍然在學習,也感謝你關於empty():)的提示你真了不起。 – Mae 2014-10-17 20:08:10

+0

如果文件類型是多個 2015-06-05 06:26:43

-2

根據http://www.php.net從$ 4.1.0開始有$ _FILES。這個變量保存關於上傳文件的信息。所以,你應該在代碼

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

-1 empty()將返回false,即使沒有文件上傳。 – MrCode 2014-10-17 20:00:39

+0

我已經試過了你的代碼,並沒有工作。如果我不輸入文件,它只會打印一個空數組。 「Array([file_upload] => Array([name] => [type] => [tmp_name] => [error] => 4 [size] => 0))」 – Mae 2014-10-17 20:05:23

+0

謝謝mrcode。我將if條件更改爲isset(...)。 – Matthias 2014-10-17 20:12:32

0

首先,點擊提交,而不選擇文件

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

結果:

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

還有的 [file_upload] [錯誤] = 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 .."; 

     } 

    } 

    } 
+0

感謝您使用此代碼段,它可能會提供一些即時幫助。通過展示*爲什麼*這是一個很好的解決方案,對未來的讀者會有更好的解決方案,這將爲它的教育價值提供一個合適的解釋[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。 – 2017-07-26 10:23:13

相關問題