2012-12-19 22 views
11

Tôi có một biểu mẫu có trường tệp được gọi là image, nhưng trường này không bắt buộc.
Khi người dùng không chọn bất kỳ tệp nào dưới dạng, do_upload() luôn trả về lỗi.
Làm cách nào để kiểm tra xem người dùng đã chọn tệp trước khi thực hiện hành động tải lên trong bộ điều khiển của tôi?Cách kiểm tra xem trường tệp có trống trong trình mã hóa không?

+0

Chỉ cần loại bỏ các 'quy tắc required' nếu bạn đã tuyên bố trong các quy tắc xác nhận –

+0

Tôi không có yêu cầu xác nhận cho lĩnh vực này. – squiter

+0

Sau đó, bạn sẽ không nhận được bất kỳ lỗi nào khi người dùng không chọn bất kỳ tệp nào trong biểu mẫu .. Lỗi chính xác là gì? –

Trả lời

32

Vui lòng sử dụng rỗng()

if (empty($_FILES['userfile']['name'])) { 
} 
+0

Tôi không thể truy cập $ _FILE từ bộ điều khiển mã vạch. – squiter

+8

Đó là $ _FILES không phải $ _FILE –

+0

Đó là $ _FILES (số nhiều), và tại sao lại không? Biểu mẫu của bạn được gửi đến một hàm trong bộ điều khiển có nghĩa là tất cả các super_globals (tức là $ _POST và $ _FILES) có sẵn trong phạm vi chức năng – Matanya

0

sử dụng chức năng empty() trống không kiểm tra xem trường Tệp trống hay không

if (! empty($_FILES)) {...} 


if(!empty($_FILES['myFileField'])) { 
    // file field is not empty.. 
} else { 
    // no file uploaded.. 
} 
+0

Tôi sử dụng sản phẩm nào()? Tôi không thể truy cập $ _FILE hoặc $ this-> đầu vào cho trường này. – squiter

+0

kiểm tra câu trả lời cập nhật – Ghostman

+0

Tôi không thể truy cập $ _FILE vào Bộ điều khiển Codeigniter. – squiter

1

Hãy thử để kiểm tra xem các tập tin có giá trị sử dụng is_uploaded_file(). Ví dụ:

if(is_uploaded_file($_FILES['userfile']['tmp_name'])) 
{ 
    do_upload(); 
} 
+0

Tôi không thể truy cập $ _FILE từ bộ điều khiển mã vạch. – squiter

4

Trong điều khiển của bạn, về chức năng tiếp nhận các hình thức nộp:

if (isset($_FILES['image']['name']) && !empty($_FILES['image']['name'])) { 
    // do_upload 

} 
+2

'isset' là dư thừa. Từ [docs] (http://php.net/manual/en/function.empty.php): 'empty() về cơ bản là tương đương ngắn gọn với! Isset ($ var) || $ var == false' –

0

Như tập tin lỗi tải lên "Không tệp được chọn "là số 4, cách thực hiện đúng là:

if ($_FILES['my_image_field_name']['error'] !== 4){ 
    if ($this->upload->do_upload('my_image_field_name')) { ... 

Khi kiểm tra theo tên hoặc tên miền tmp_name, có thể có các lý do khác khiến các trường này không được phổ biến và bạn có thể bỏ lỡ các trường này.

1

Dưới đây là đầy đủ kịch bản để kiểm tra nếu lĩnh vực tập tin rỗng hay không trong php

<!DOCTYPE html> 
<html> 
<body> 

<form action="#" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input name="my_files[]" type="file" multiple="multiple" /> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 


<?php 

if (isset($_FILES['my_files'])) 
    { 
    $myFile = $_FILES['my_files']; 
    $fileCount = count($myFile["name"]); 


     for ($i = 0; $i <$fileCount; $i++) 
     { 
      $error = $myFile["error"][$i]; 

      if ($error == '4') // error 4 is for "no file selected" 
      { 
       echo "no file selected"; 
      } 
      else 
      { 

       $name = $myFile["name"][$i]; 
       echo $name; 
       echo "<br>"; 
       $temporary_file = $myFile["tmp_name"][$i]; 
       echo $temporary_file; 
       echo "<br>"; 
       $type = $myFile["type"][$i]; 
       echo $type; 
       echo "<br>"; 
       $size = $myFile["size"][$i]; 
       echo $size; 
       echo "<br>"; 



       $target_path = "uploads/$name"; //first make a folder named "uploads" where you will upload files 


       if(move_uploaded_file($temporary_file,$target_path)) 
        { 
        echo " uploaded"; 
        echo "<br>"; 
        echo "<br>"; 
        } 
        else 
        { 
        echo "no upload "; 
        } 




       } 
     } 
} 
     ?> 


</body> 
</html> 

Nhưng hãy tỉnh táo. Người dùng có thể tải lên bất kỳ loại tệp nào và cũng có thể hack máy chủ hoặc hệ thống của bạn bằng cách tải lên tệp độc hại hoặc tệp php. Trong tập lệnh này, cần có một số xác nhận hợp lệ.

tham khảo http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/

Hy vọng nó sẽ giúp bạn.

1

Chỉ cần sử dụng mã php gốc để kiểm tra tệp tải lên.

if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) { 
echo 'No upload'; 
} 
0
if(!empty($_FILES[$file_name]['name'])){ 
    // TODO your logic 

}else{ 
    echo "empty"; 
} 
Các vấn đề liên quan