【问题标题】:PHP - Multidimensional Array Input ( Having File Type & Text Type ) Form SubmissionPHP - 多维数组输入(具有文件类型和文本类型)表单提交
【发布时间】:2014-12-24 08:09:28
【问题描述】:

查看

<div>
   <input type='file' name="active_board_data[pictures][]">
   <input type='text' name="active_board_data[name][]">
   <input type='text' name="active_board_data[description][]">
</div>
<div>
   <input type='file' name="active_board_data[pictures][]">
   <input type='text' name="active_board_data[name][]">
   <input type='text' name="active_board_data[description][]">
</div>
<div>
   <input type='file' name="active_board_data[pictures][]">
   <input type='text' name="active_board_data[name][]">
   <input type='text' name="active_board_data[description][]">
</div>

提交后var_dump($_POST['active_board_data']);显示

array (size=3)
  'name_description_input' => 
    array (size=3)
      0 => string '' (length=0)
      1 => string '<p>sdfv</p>' (length=11)
      2 => string '' (length=0)
  'relevant_details_description_input' => 
    array (size=3)
      0 => string '<p>dsrvsd</p>' (length=13)
      1 => string '' (length=0)
      2 => string '<p>sdfvr</p>' (length=12)
  'pictures' => 
    array (size=1)
      0 => string '' (length=0)

var_dump($_FILES['active_board_data']); 显示

array (size=5)
  'name' => 
    array (size=1)
      'pictures' => 
        array (size=3)
          0 => string 'active_trustees_26-Oct-2014__08_10_00__25408.jpg' (length=48)
          1 => string 'active_trustees_26-Oct-2014__08_10_18__7037.jpg' (length=47)
          2 => string 'active_trustees_26-Oct-2014__08_10_18__3779.jpg' (length=47)
  'type' => 
    array (size=1)
      'pictures' => 
        array (size=3)
          0 => string 'image/jpeg' (length=10)
          1 => string 'image/jpeg' (length=10)
          2 => string 'image/jpeg' (length=10)
  'tmp_name' => 
    array (size=1)
      'pictures' => 
        array (size=3)
          0 => string 'C:\wamp\tmp\php128F.tmp' (length=23)
          1 => string 'C:\wamp\tmp\php12A0.tmp' (length=23)
          2 => string 'C:\wamp\tmp\php12B0.tmp' (length=23)
  'error' => 
    array (size=1)
      'pictures' => 
        array (size=3)
          0 => int 0
          1 => int 0
          2 => int 0
  'size' => 
    array (size=1)
      'pictures' => 
        array (size=3)
          0 => int 49543
          1 => int 52657
          2 => int 29884

这是提交表单后在 php 中将文件和文本放在同一个数组上的正确方法吗?还是我必须更改标记? 注意:我正在动态创建 div。请帮助。在此先感谢。 这是要提交的表格的图片:

【问题讨论】:

  • 是的,这是多个字段的正确输入。
  • 但是因为我有文件和文本输入,我怎么能有发布的数据?
  • 您是否在表单标签上设置了enctype="multipart/form-data"(您没有显示该部分)?因为发布文件时需要这样做。此外,文件不应该出现在 $_POST 中,它会出现在 $_FILES 中,但是名称/结构将大致相同,其中第一个文件与第一个名称/描述相关......等等。跨度>
  • 请建议我如何在特定情况下在 php 中获取发布的数据。 $_POST[] 只提供文字,$_FILES[] 只提供图片。 @u_mulder。是的,我有enctype="multipart/form-data",否则我无法获得$_FILES[] 结果。发布后我需要同一索引上的文件和文本。 @乔纳森库恩

标签: php arrays forms codeigniter multidimensional-array


【解决方案1】:

您仍然可以同时访问这两者,但您可以使用for 结构,而不是使用foreach 结构,如下所示:

$szFiles = sizeof ($_FILES['active_board_data']['name']['pictures']);
for ($i=0; $i<$szFiles; $i++)
{
    $file_name   = $_FILES['active_board_data']['name']['pictures'][$i];
    $name        = $_POST['active_board_data']['name'][$i];
    $description = $_POST['active_board_data']['description'][$i];
}

顺便说一句:对我来说,框架最好的部分是使用它的一些辅助功能,例如 CI 文件上传器辅助系统:https://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html

【讨论】:

  • 其实我需要创建一个相册。将提供图片、名称和描述的位置。这些字段是not required,因为有时无法提供图片或没有任何描述。那么,如果该行只有名称和描述,或者该行只有图片和名称,我如何获取信息? @汉斯。我希望我让你理解我的问题。我可以用你的答案解决这个问题吗?
  • 是的,在每个表单的 [] 之间添加一个数字,因此它们看起来像 active_board_data[pictures][0]active_board_data[name][0] 等。您可能希望在其中一个 _POST 字段上执行 sizeof情况也是如此。
  • 请@Hans 你能用viewcontroller 代码改进你的Answer 吗?
  • 答案没有变化; PHP 只看到空的[] 并添加数字本身。你是在强迫它,所以如果他们不添加文件,你不必担心丢失一个。
猜你喜欢
  • 2014-03-31
  • 2019-08-09
  • 2016-12-10
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多