0

私はthidコードを使用しています。これは基本的に、ユーザーがブラウザにドロップしたファイルを取得してphpに投稿し、ファイル名をエコーするのに役立ちますが、2つのファイルをドロップしてphpファイルを呼び出して試してみると、phpの配列に問題がありますファイルの数をエコーすると、常に5が返され、2つのファイル名と+その他が未定義のインデックスとしてエコーされます....そして、5つのファイルをアップロードすると、問題なく5つすべてが表示されます....なぜこれがハプニング...

これが私のjqueryコードです:

function handleFiles(droppedFiles) {
  var uploadFormData = new FormData($("#yourregularuploadformId")[0]);
  if(droppedFiles.length > 0) {
    // checks if any files were dropped
    for(var f = 0; f < droppedFiles.length; f++) {
      // for-loop for each file dropped
      alert(droppedFiles[f]['name']);
      uploadFormData.append("files[]",droppedFiles[f]);
      // adding every file to the form so you could upload multiple files
    }
  }

 // the final ajax call
 alert(uploadFormData);
 $.ajax({
   url : "try.php?size="+s, // use your target
   type : "POST",
   data : uploadFormData,
   cache : false,
   contentType : false,
   processData : false,
   success : function(ret) {
     alert(ret);
   }
  });
  return false;
}

ここに私のphpコードがあります:

if(isset($_FILES["files"])) {
  for ($i=0;$i<count($_FILES['files']);$i++) {
    echo $_FILES['files']['name'][$i];
    echo "\n";
  }
}
4

1 に答える 1

0

このようには機能しません。$_FILESフィールド名でインデックス付けされた、アップロードされたファイルを含む連想配列です。name各エントリには、tmp_name、 、size、 の5 つの要素がtypeありerrorます。これらの各要素は、アップロードされたファイルと同じ数の要素を含む配列です。

したがって、 の場合count($_FILES['files'])、結果は常に 5 になります。ただし、上記のキーのいずれかがcount($_FILES['files'][$xyz])どこにある場合、それはアップロードされたファイルの数になります。$xyz

したがって、コードは次のように機能します。たとえば、次のようになります。

if(isset($_FILES["files"]))
  {
  for ($i=0;$i<count($_FILES['files']['name']);$i++) 
    {
    echo $_FILES['files']['name'][$i];
    echo "\n";
    }
  }

またはさらに良い(他に何もないとしても、読みやすさのために):

if(isset($_FILES["files"]))
  {
  $filenames=$_FILES['files']['name'];
  for ($i=0;$i<count($filenames);$i++) 
    {
    echo $filenames[$i];
    echo "\n";
    }
  }
于 2013-10-13T10:41:01.780 に答える