2

この質問は、これまでに 100 万回も出されていることがわかります。私は多くの応答を経験してきましたが、正しく理解できないようです:-

複数のファイルをアップロードしようとしているだけです。フォームが正しいことは確かです。私が得る問題は、foreach ループを使用すると、PHP が 5 回循環することです ($_FILES のキーごとに 1 回と思います)。

アップロードされたファイルを $_FILE['file_upload'] 配列で数えてから、for ループを使用し、最後に次のようなインデックスを含める必要があることを読みました。

$_FILES['file_upload']['name'][$1]

ただし、これらの値にアクセスしようとすると、値の最初の文字しか取得できません (これが理由だと思います)。

私が考えることができる唯一のことは、使用することです

for($i ; $i<$size ; $i++){...}

その中に foreach ループを入れ子にしますが、これは非効率的であり、この目的のための他の提案は見たことがありません。

したがって、誰かが私を完全に正すことができれば、私は永遠に感謝します. 私のコードはここにあります:-

foreach ($_FILES['file_upload'] as $key => $value){    
    $tmp_file = $_FILES['file_upload']['tmp_name'];
    $target_file = basename($_FILES['file_upload']['name']);  

    if(move_uploaded_file($tmp_file,$upload_location."/".$target_file)){
        $message = "File uploaded successfully";
    } else {
        $error = $_FILES['file_upload']['error']; // get the error
        $_SESSION['errors'][] = $error_msg[$error];// return the error that matches
    }// end if
} // end for

明確にするために-上記のコードは機能し、画像をアップロードしますが、ループが5回循環する場所($_FILES属性ごとに1回と仮定しています)で、5つのエラーメッセージが表示されます.これが理にかなっていることを願っています.

ご指摘いただきありがとうございます。

フィル

4

3 に答える 3

0

私はあなたを完全に理解しているとは思いません。複数のファイルをアップロードする場合は、foreach を使用する必要があります (カウンターは不要です)。

使用する唯一のカウンターは、正常にアップロードされたファイルの数をカウントすることです。

これを試して:

$success = 0;
foreach ($_FILES['files']['name'] as $file => $name){    
  $tmp_file = $_FILES["files"]["tmp_name"][$file];
  $target_file = $name;  

  if(move_uploaded_file($tmp_file,$upload_location."/".$target_file)){
    $message = "File uploaded successfully";
    $success++;
  } else {
    $error = $_FILES['file_upload']['error']; // get the error
    $_SESSION['errors'][] = $error_msg[$error];// return the error that matches
  }// end if
} // end for
echo $success.' files were uploaded'; 
于 2014-08-19T14:30:57.613 に答える
0

あなたforeachをこれに変えてください

foreach ($_FILES['file_upload']['tmp_name'] as $key => $value){    
    $tmp_file = $_FILES['file_upload']['tmp_name'][$key];
    $target_file = basename($_FILES['file_upload']['name'][$key]);  

    if(move_uploaded_file($tmp_file,$upload_location."/".$target_file)){
        $message = "File uploaded successfully";
    } else {
        $error = $_FILES['file_upload']['error'][$key]; // get the error
        $_SESSION['errors'][] = $error_msg[$error];// return the error that matches
    }// end if
} // end for
于 2014-08-19T14:20:23.750 に答える