如何解决带有可选项目的多文件上传
<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 举报,一经查实,本站将立刻删除。