2012-12-19 21 views
11

ファイルフィールドがimageのフォームがありますが、このフィールドは必須ではありません。
ユーザーがフォームでファイルを選択しないと、​​3210は常にエラーを返します。
コントローラでアップロード操作を実行する前にユーザーがファイルを選択したかどうかを確認するにはどうすればよいですか?codeigniterでファイルフィールドが空であるかどうかをチェックする方法?

+0

あなたは、私がこのフィールドの検証を必要としていないバリデーションルール –

+0

でそれを宣言した場合だけで 'required'ルールを削除。 – squiter

+0

これで、ユーザーがフォーム内のファイルを選択していないときにエラーは発生しません。エラーは何ですか? –

答えて

32

ファイルアップロードエラー「いいえとして空()

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

codeigniterコントローラから$ _FILEにアクセスできません。 – squiter

+8

$ _FILESではない$ _FILE –

+0

$ _FILES(複数)ですが、どうしてですか?あなたのフォームは、すべてのsuper_globals(すなわち$ _POSTと$ _FILES)が関数の範囲内で利用可能であることを意味するコントローラー内の関数にサブミットされます – Matanya

0

使用empty()空の関数は、ファイルのフィールドは、ファイルがis_uploaded_file()を使用して有効であるかどうかをチェックしてみ空かない

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


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

ここでempty()を使用していますか?フィールドの$ _FILEまたは$ this->入力にアクセスできません。 – squiter

+0

更新された答えを確認してください – Ghostman

+0

Codeigniter Controllersに$ _FILEにアクセスすることはできません。 – squiter

1

であるかどうかをチェックしません。たとえば、次のようにあなたのコントローラで

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

codeigniterコントローラから$ _FILEにアクセスできません。 – squiter

4

、送信されたフォームを受け取る機能上:

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

} 
+2

'isset'は冗長です。 [docs](http://php.net/manual/en/function.empty.php)から: 'empty()は本質的に!isset($ var)||と簡潔に等価です。 $ var == false' –

0

を使用してくださいファイル選択 "は4番ですが、正しい方法は次のとおりです。

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

名前またはtmp_nameでチェックすると、これらのフィールドにデータが入力されなかった他の理由があるかもしれません。ここで

1

は完全なスクリプトは、ファイルのフィールドは、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> 

に空であるかどうかを確認してください。しかし、警告することです。ユーザーは任意の種類のファイルをアップロードできますし、悪意のあるファイルやPHPファイルをアップロードしてサーバーやシステムをハックすることもできます。このスクリプトでは、いくつかのバリデーションが必要です。

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

が、それはあなたを助けることを願っています参照してください。

1

ファイルのアップロードを確認するためにネイティブPHPコードを使用してください。

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"; 
} 
関連する問題