我有一个像这样的html表单:
<form method="post" enctype="multipart/form-data">
<input type="file" name="pictures[]" required>
<input type="file" name="pictures[]">
<input type="file" name="pictures[]">
<input type="file" name="pictures[]">
<input type="file" name="pictures[]">
</form>
这样,用户最多可以上传5张图片。我知道我可以用<input type="file" name="pictures[]" multiple>
来做,但我的想法是,我希望用户能够从他们设备的不同文件夹中选择文件,因此我之所以用以上格式编写的原因
现在,我现在遇到的挑战是,并非所有输入都是必需的,并且在提交表单时,我执行正常的输入检查$_FILES['pictures']['name]
,它会循环遍历所有文件数组,是正常的,因为它们具有相同的名称。
现在我头疼..
现在,如果我在输入框中添加的文件少于5个时进行检查$_FILES['pictures']['name']
,则由于未输入的输入字段而返回错误。
修改
首先我检查是否输入了至少一个文件,然后检查是否有任何文件没有返回任何错误。请参阅下面的代码:
if ( count($_FILES['pictures']['name']) < 1 ) {
echo "Please enter at least one image";
}
elseif ( $_FILES['pictures']['error'] != 0 ) {
echo "Sorry, one or more of your uploaded images is invalid";
}
如果未输入所有5个输入字段,表单将始终返回错误。
另一个编辑
也许我无法清楚地解释我想要实现的目标......但这是要点。
除了需要其中一个输入之外,当提交表单时没有输入所有字段,我做了类似(跳过所需的支票):
$files = array();
$fileData = $_FILES['pictures'];
$files = array();
if ( is_array($fileData['name']) ) {
for ( $i=0; $i < count($fileData['name']) ; ++$i ) {
$files[] = array(
'name' => $fileData['name'][$i],
'tmp_name' => $fileData['tmp_name'][$i],
'type' => $fileData['type'][$i],
'error' => $fileData['error'][$i],
'size' => $fileData['size'][$i],
);
}
}
else {
$files[] = $fileData;
}
因此,当我执行以下验证时:
foreach ($files as $file) {
if ( $file['name'] == '' ) {
echo "Error";
}
}
,并且用户未输入所有图像,则返回错误消息。
print_r()
的{{1}}会返回此信息:
$files
有没有办法在进行检查时让空字段被忽略?
我知道我可以通过检查空字段并在提交时添加Array
(
[photos] => Array
(
[name] => Array
(
[0] => 11356010_127900540886840_1152019271_n.jpg
[1] => 11370980_130679033939470_1067474802_n.jpg
[2] =>
[3] =>
[4] =>
)
[type] => Array
(
[0] => image/jpeg
[1] => image/jpeg
[2] =>
[3] =>
[4] =>
)
[tmp_name] => Array
(
[0] => C:\xampp7\tmp\php1C9F.tmp
[1] => C:\xampp7\tmp\php1CaF.tmp
[2] =>
[3] =>
[4] =>
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 4
[3] => 4
[4] => 4
)
[size] => Array
(
[0] => 108492
[1] => 108492
[2] => 0
[3] => 0
[4] => 0
)
)
[files] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
)
的属性来使用javascript执行此操作,但是如果用户在他/她的浏览器中关闭了javascript,会发生什么?
我尝试过像这样使用disabled
:
array_filter()
,但它返回一个空数组。有人可以指出我正确的方向吗?
答案 0 :(得分:1)
$_FILES['pictures']['error']
最终将成为一个错误代码数组,因此您可以循环显示它并明确处理它们。有good example of this in the PHP documentation。
在您的情况下,您可能希望将循环的第一次迭代作为特殊情况处理,因为您已将第一次迭代定义为必需。像这样:
foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($key == 0 && $error != UPLOAD_ERR_OK) {
// the required one didn't succeed, so we have a problem
} else {
// ...
答案 1 :(得分:0)
因为它是一个数组使用in_array()http://php.net/manual/en/function.in-array.php
<label style="font-size:16px;">
<input style="height:1em; width:1em;" type="radio">
<span>Button One</span>
</label>