2010-06-02 53 views
44

trên một trang, tôi có:Cách kiểm tra xem người dùng đã chọn một tệp để tải lên chưa?

if (!empty($_FILES['logo']['name'])) { 
    $dossier  = 'upload/'; 
    $fichier  = basename($_FILES['logo']['name']); 
    $taille_maxi = 100000; 
    $taille  = filesize($_FILES['logo']['tmp_name']); 
    $extensions = array('.png', '.jpg', '.jpeg'); 
    $extension = strrchr($_FILES['logo']['name'], '.'); 

    if(!in_array($extension, $extensions)) { 
     $erreur = 'ERROR you must upload the right type'; 
    } 

    if($taille>$taille_maxi) { 
     $erreur = 'too heavy'; 
    } 

    if(!empty($erreur)) { 
     // ... 
    } 
} 

Vấn đề là, nếu người dùng muốn chỉnh sửa thông tin mà không tải LOGO, nó đặt ra một lỗi: 'lỗi bạn phải tải lên đúng loại'

Vì vậy, nếu người dùng không đặt bất kỳ thứ gì vào hộp nhập liệu để tải lên, tôi không muốn nhập trong các điều kiện kiểm tra này.

tôi thử nghiệm: if (!empty($_FILES['logo']['name'])if (isset($_FILES['logo']['name'])

nhưng cả hai không có vẻ làm việc.

Bất kỳ ý tưởng nào?

chỉnh sửa: có thể tôi không rõ ràng, tôi không muốn kiểm tra xem anh ấy đã tải lên biểu trưng hay không, tôi muốn kiểm tra NẾU anh ấy đã chọn tệp để tải lên, bởi vì ngay bây giờ, nếu anh ấy không chọn tập tin để tải lên, php nêu ra một lỗi nói với anh ta phải tải lên với định dạng đúng.

cảm ơn.

Trả lời

77

Bạn có thể kiểm tra điều này với:

if (empty($_FILES['logo']['name'])) { 
    // No file was selected for upload, your (re)action goes here 
} 

Hoặc bạn có thể sử dụng một cấu trúc javascript mà chỉ cho phép upload/nút gửi bất cứ khi nào lĩnh vực upload có một giá trị khác sau đó là một chuỗi rỗng ("") để tránh gửi biểu mẫu mà không cần tải lên.

+1

Vui lòng xem câu trả lời dưới đây http://stackoverflow.com/a/2958221/84292 –

+1

đó là những gì tôi đang tìm kiếm. cảm ơn ... +1 cho cả câu hỏi và câu trả lời. (y) –

7

Tôi sẽ kiểm tra if (file_exists ($_FILES['logo']['tmp_name'])) và xem nó có hoạt động hay không.

Hoặc, approperately hơn (nhờ Baloo): if (is_uploaded_file ($_FILES['logo']['tmp_name']))

+0

tôi đã thêm một số thông tin vào bài đăng của mình. nếu bạn có thể nhìn vào nó. thx –

14

Bạn nên sử dụng is_uploaded_file($_FILES['logo']['tmp_name']) để đảm bảo rằng các tập tin đã thực sự được tải lên thông qua một POST.

+0

tôi đã thêm một số thông tin vào bài đăng của tôi. nếu bạn có thể nhìn vào nó. thx –

33

Có một phần trong tài liệu php về file handling. Bạn sẽ find mà bạn có thể kiểm tra các lỗi khác nhau và một trong số họ là

UPLOAD_ERR_OK 
    Value: 0; There is no error, the file uploaded with success. 
<...> 
UPLOAD_ERR_NO_FILE 
    Value: 4; No file was uploaded. 

Trong trường hợp của bạn, bạn cần có mã như

if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) { ... } 

hoặc

if ($_FILES['logo']['error'] != UPLOAD_ERR_NO_FILE) { ... } 

Bạn nên cân nhắc kiểm tra (và có lẽ cung cấp phản hồi thích hợp cho người dùng) cho các lỗi khác nhau.

+0

@Tristan mở mắt và xem: Giá trị: 4; ** Không có tệp nào được tải lên ** –

+0

@Col. Shrapnel oooops, thực sự, tôi xin lỗi, có lẽ đã đến lúc tôi đeo kính của mình, p –

+1

Tôi đã tự kiểm tra điều này. Nó thực sự là cách chính xác để kiểm tra cho một trường hợp như vậy. Cũng lưu ý: "Nếu không có tệp nào được chọn để tải lên trong biểu mẫu của bạn, PHP sẽ trả về $ _FILES ['userfile'] ['size'] là 0 và $ _FILES ['userfile'] ['tmp_name'] là không có . " (Từ Tài liệu PHP) http://php.net/manual/en/features.file-upload.post-method.php –

-3
if ($_FILES['logo']['error'] === 0) 

là cách duy nhất đúng

+1

Điều này trái với những gì Tài liệu PHP nêu rõ. Điều này sẽ thực sự đánh giá đúng nếu tệp được tải lên thành công. http://php.net/manual/en/features.file-upload.errors.php –

+0

lỗi nào sẽ xảy ra nếu không có tệp? –

Các vấn đề liên quan