2012-12-19 10 views
11

Mam formularz z polem pliku o nazwie image, ale to pole nie jest wymagane.
Gdy użytkownik nie wybierze żadnego pliku w formularzu, do_upload() zawsze zwróci błąd.
Jak mogę sprawdzić, czy użytkownik wybrał plik przed wykonaniem operacji przesyłania w moim kontrolerze?Jak sprawdzić, czy pole pliku jest puste w codeigniter?

+0

Wystarczy usunąć 'required' regułę jeśli zadeklarowały go w zasady walidacji –

+0

nie mam wymagają sprawdzania poprawności dla tego pola. – squiter

+0

Nie powinieneś mieć żadnych błędów, gdy użytkownik nie wybierze żadnego pliku w formularzu. Jaki dokładnie jest błąd? –

Odpowiedz

32

Proszę używać pusty()

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

Nie mogę uzyskać dostępu do $ _FILE z kontrolerów kodów. – squiter

+8

To jest $ _FILES nie $ _FILE –

+0

To $ _FILES (liczba mnoga), a dlaczego nie? Twój formularz jest przekazywany do funkcji kontrolera, co oznacza, że ​​wszystkie superglobalne (tj. $ _POST i $ _FILES) są dostępne w ramach funkcji – Matanya

0

użycie empty() funkcja pusta ma sprawdzić, czy pole plik jest pusty lub nie

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


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

Gdzie używam empty()? Nie mogę uzyskać dostępu do pola $ _FILE lub $ this-> input dla pola. – squiter

+0

sprawdź zaktualizowaną odpowiedź – Ghostman

+0

Nie mogę uzyskać dostępu do $ _FILE w kontrolerach kodów. – squiter

1

Spróbuj sprawdzić, czy plik jest ważny przy użyciu is_uploaded_file(). Na przykład:

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

Nie mogę uzyskać dostępu do $ _FILE z kontrolerów kodów. – squiter

4

W kontrolerze, funkcję, która przyjmuje przedstawioną postać:

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

} 
+2

"Zestaw" jest nadmiarowy. Z [docs] (http://php.net/manual/en/function.empty.php): 'empty() jest zasadniczo zwięzłym odpowiednikiem isset ($ var) || $ var == false' –

0

Jako błąd przesyłania plików „Nie wybrany plik "to numer 4, prawidłowym sposobem wykonania tego jest:

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

Podczas sprawdzania według nazwy lub nazwy tmp, mogą istnieć inne powody, dla których te pola nie zostały wypełnione i możesz ich nie zauważyć.

1

Oto pełne skrypt, aby sprawdzić, czy pole pliku jest pusta lub nie w 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> 

Ale bądź czujny. Użytkownik może przesłać dowolny typ pliku, a także zhakować serwer lub system, przesyłając szkodliwy plik lub plik php. W tym skrypcie powinno być kilka zatwierdzeń.

odnoszą http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/

nadzieję, że to pomoże.

1

Wystarczy użyć natywnego kodu php, aby sprawdzić przesyłanie pliku.

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"; 
} 
Powiązane problemy