微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有可选项目的多文件上传

如何解决带有可选项目的多文件上传

我有一个包含多个输入的表单,如下所示:

<div id="users">
<input type="text" name="title[]" required>
<input type="file" name="images[]">

<input type="text" name="title[]" required>
<input type="file" name="images[]">

<input type="text" name="title[]" required>
<input type="file" name="images[]">

</div>

<input type="button" value="add new user">
<input type="submit" value="submit">

问题是选择图像是可选的,如果用户没有为任何标题选择任何图像,则发布的数据将如下所示:

title  = ["title1","title2","title3"]
images = [image1.jpg,image3.jpg]

用户数量不是固定的,用户可以通过点击添加新用户按钮添加任意数量标题图片。所以“添加新用户”按钮将向用户 div 添加一对这些输入:

<input type="text" name="title[]" required>
<input type="file" name="images[]">

有没有办法检测文件是否被选中?或者为未选择的文件输入发送认值?如果没有选择文件,我想为图像设置空值,如下所示:

user1:{title="title1",image=image1.jpg}
user2:{title="title2",image=null}
user3:{title="title3",image=image3.jpg}
.
.
.

解决方法

您可以检查是否为文件设置了特定索引:

$("#submit").click(function () {

    // prepare
    var formData = $("#regForm").serializeArray();
    // get all stored as Array []
    var bookings = JSON.parse(localStorage.getItem('bookings') || '[]');

    for (formData = 0; formData < localStorage.length; formData++) {
    // insert and save
    localStorage.setItem("bookings",JSON.stringify([formData]));
    }
    
});
,

您所要做的就是处理这 2 个数组并检查每个标题是否有匹配的图像。如果每个标题都没有图片,请用您喜欢的任何内容代替图片名称

<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  
    $output = [];

    foreach( $_POST['title'] as $idx => $title){
      $u = $idx+1;
      $output['user'.$u] = ['title'=>$title,'images'=> $_POST['images'][$idx] == '' ? 'NULL' : $_POST['images'][$idx]];
    }
    $j = json_encode($output);
    echo $j;
  }

结果

{
    "user1":{"title":"asss","images":"NULL"},"user2":{"title":"dd","images":"hammer.jpg"}
}
,

谢谢大家,Pavol Velky 说对了一部分,虽然数组大小小于输入的数量,但是浏览器会为数组设置一个索引,例如如果您有两个输入,只需选择第二个,该数组将类似于:item:[1:{}](如果您选择第一个:item:[{}]),您可以通过索引号检查顺序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。