【问题标题】:Issue with uploading file inputs with multiple names上传具有多个名称的文件输入的问题
【发布时间】:2018-05-24 18:43:36
【问题描述】:

我有几个文件输入字段,每个文件输入都有一个通用名称和一个唯一名称。唯一名称用于某些验证目的。

<input name="file12 ftr_file_uploads[]" class="multi_files file " type="file">
<input name="file10 ftr_file_uploads[]" class="multi_files file " type="file">
<input name="file10 ftr_file_uploads[]" class="multi_files file " type="file">
...............

当尝试以 PHP 表单提交上传文件时, $_FILES 的内容如下。

    array(2) { 
   ["file1_ftr_file_uploads"]=> array(5)
        { ["name"]=> array(1) { [0]=> string(13) "Jellyfish.jpg" } 
        ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } 
        ["tmp_name"]=> array(1) { [0]=> string(14) "/tmp/phpx7iId2" } 
        ["error"]=> array(1) { [0]=> int(0) } 
        ["size"]=> array(1) { [0]=> int(775702) } }
  ["file2_ftr_file_uploads"]=> array(5) 
        { ["name"]=> array(1) { [0]=> string(12) "Penguins.jpg" } 
        ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } 
        ["tmp_name"]=> array(1) { [0]=> string(14) "/tmp/phpN6QWoD" } 
        ["error"]=> array(1) { [0]=> int(0) } 
        ["size"]=> array(1) { [0]=> int(777835) } } 
  }

数组键名更改为文件输入字段的串联名称。我需要名称为ftr_file_uploads 而不是fileIDnumber_ftr_file_uploads

我做了如下的事情。

foreach($_FILES as $keyval=>$value)
    {
          $_FILES['ftr_file_uploads'] = $_FILES[$keyval]; //removed 
           $_FILES['ftr_file_uploads'][] mentioned in the answer 
           unset($_FILES[$keyval]);
    }

当我这样使用时,我会得到这样的结果。

    array(1) {
  ["ftr_file_uploads"]=>
  array(5) {
    ["name"]=>
    array(1) {
      [0]=>
      string(14) "Lighthouse.jpg"
    }
    ["type"]=>
    array(1) {
      [0]=>
      string(10) "image/jpeg"
    }
    ["tmp_name"]=>
    array(1) {
      [0]=>
      string(14) "/tmp/phpLdslxb"
    }
    ["error"]=>
    array(1) {
      [0]=>
      int(0)
    }
    ["size"]=>
    array(1) {
      [0]=>
      int(561276)
    }
  }
}

我需要这样的结果。

 array(1) {
  ["ftr_file_uploads"]=>
  array(5) {
    ["name"]=>
    array(2) {
      [0]=>
      string(14) "Hydrangeas.jpg"
      [1]=>
      string(5) "w.jpg"
    }
    ["type"]=>
    array(2) {
      [0]=>
      string(10) "image/jpeg"
      [1]=>
      string(10) "image/jpeg"
    }
    ["tmp_name"]=>
    array(2) {
      [0]=>
      string(14) "/tmp/phpKMwmH1"
      [1]=>
      string(14) "/tmp/phpwwHU9G"
    }
    ["error"]=>
    array(2) {
      [0]=>
      int(0)
      [1]=>
      int(0)
    }
    ["size"]=>
    array(2) {
      [0]=>
      int(595284)
      [1]=>
      int(879394)
    }
  }
}

【问题讨论】:

    标签: php file-upload


    【解决方案1】:
    foreach ($_FILES as $name => $file) {
        $_FILES['ftr_file_uploads'][] = $file;  // [] means add $file to $_FILES['ftr_file_uploads'] array
        unset($_FILES[$name]); // remove element from $_FILES
    }
    

    【讨论】:

    • 我需要输入字段的另一个名称以进行一些验证。
    • 所以你可以这样命名 name="ftr_file_uploads[0]", name="ftr_file_uploads[1]", name="ftr_file_uploads[2]" 等等。你会有不同的名字php中的html和数组
    • 响应与我需要的结果不同。我得到的结果是array(1) { ["ftr_file_uploads"]=> array(5) { ["name"]=> array(2 ) { [1]=> string(12) "Penguins.jpg" [2]=> string(9) "Koala.jpg" } ["type"]=> array(2) { [1]=> string( 10) "image/jpeg" [2]=> 字符串(10) "image/jpeg" } ......
    • 我需要的结果就是我在问题中提到的那个
    • 你尝试得到这个结果吗? snag.gy/FJdrv2.jpg 如果是,请看transfer.sh/LfId8/form.php
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2010-10-25
    相关资源
    最近更新 更多