最近幫客戶寫了一個檔案上傳的功能,想要做個empty判斷確認是否有上傳檔案,有值才要進行後續的程式運作,像這樣的功能!!
結構
<input type='file' class='form-control' name='class_excelname' id='class_excelname' accept='xls'>
寫了一個判斷語法
if(!empty($_FILES['class_excelname'])){ //判斷是否有傳入值
echo '有檔案上傳;;
}
但怎麼測試即使沒有上傳檔案empty還是判斷有值,真是非常的奇怪,$_FILES['class_excelname']明明就是空的阿!!那是哪出問題了,後來用var_dump();看了一下$_FILES['class_excelname']裡面到底有什麼東東,顯示下面的內容!
array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) }
原來在$_FILES裡面還包含了name,type,tmp_name,error,size五個欄位數值,所以是二維陣列形式,難怪判斷$_FILES['class_excelname']會顯示有值,因為裡面還有個空陣列!
修改一下,改成
if(!empty($_FILES['class_excelname']['name'])){ //判斷是否有傳入值
echo '有檔案上傳;;
}
抓第二層陣列裡面的name來判斷是否有數值,這樣就沒問題了!!可以正確的判斷出是否有檔案被上傳。
如果是多檔上傳name是陣列格式,則判斷空陣列方式需要以name第一個陣列值為判斷依據
if(!empty($_FILES['class_excelname']['name'][0])){ //判斷是否有傳入值
echo '有檔案上傳;;
}
這樣就沒問題了!!
教學撰寫:徐嘉裕 Neil hsu
結構
<input type='file' class='form-control' name='class_excelname' id='class_excelname' accept='xls'>
寫了一個判斷語法
if(!empty($_FILES['class_excelname'])){ //判斷是否有傳入值
echo '有檔案上傳;;
}
但怎麼測試即使沒有上傳檔案empty還是判斷有值,真是非常的奇怪,$_FILES['class_excelname']明明就是空的阿!!那是哪出問題了,後來用var_dump();看了一下$_FILES['class_excelname']裡面到底有什麼東東,顯示下面的內容!
array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) }
原來在$_FILES裡面還包含了name,type,tmp_name,error,size五個欄位數值,所以是二維陣列形式,難怪判斷$_FILES['class_excelname']會顯示有值,因為裡面還有個空陣列!
修改一下,改成
if(!empty($_FILES['class_excelname']['name'])){ //判斷是否有傳入值
echo '有檔案上傳;;
}
抓第二層陣列裡面的name來判斷是否有數值,這樣就沒問題了!!可以正確的判斷出是否有檔案被上傳。
如果是多檔上傳name是陣列格式,則判斷空陣列方式需要以name第一個陣列值為判斷依據
if(!empty($_FILES['class_excelname']['name'][0])){ //判斷是否有傳入值
echo '有檔案上傳;;
}
這樣就沒問題了!!
教學撰寫:徐嘉裕 Neil hsu
留言
張貼留言