[英]PHP check if there is a file selected for upload
我有這個表格,我想檢查用戶是否選擇了一個文件。
<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']
但它打印出一個空錯誤
(Array([file_upload] => Array([name] => [type] => [tmp_name] => [error] => 4 [size] => 0)))
什么時候我不輸入文件?
使用$_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
。
首先,單擊提交而不選擇文件
/* check input 'submit' */
if (isset($_POST['submit'])) {
print($_FILES);
}
結果:
> Array ( > [file_upload] => Array > ( > [name] => > [type] => > [tmp_name] => > [error] => 4 > [size] => 0 > ) > > )
, NOT null or whitespace. 有 ,NOT null或空格數組。
代碼值= 4,表示UPLOAD_ERR_NO_FILE。
如果成功且沒有錯誤,則代碼值= 0。
點擊這里
所以使用函數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 ..";
}
}
}
根據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";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.