【发布时间】:2021-08-26 19:33:38
【问题描述】:
我不知道我正在尽我所能,否则将来会出现问题。
我必须在我的页面上显示 7 种文件类型,并且将来会增加。 因此,我获取了数组并存储了标签名称,并根据标签计数显示了文件类型。所以我在数组中有 7 个标签,我得到了 7 种文件类型。
下面是我正在使用的代码。
<div class="input_fields_wrap">
<?php
$labelname = array('Label 1','Label 2','Label 3','Label 4','Label 5','Label 6','Label 7');
$labelCount=count($labelname);
?>
<div class="row mt-3">
<?php
for ($i=0; $i < $labelCount; $i++) {
?>
<div class="col-lg-4 mb-4 ">
<div class="documentUploadWrap">
<label><?php echo $labelname[$i];?></label>
<div class="upload_doc">
<input type="hidden" name="docUploadLabel[]" value="<?php echo $labelname[$i];?>">
<input type="file" name="docUpload[]" class="fileupload">
<input type="hidden" name="docUpload[]" value="">
<div class="uploadInfo">
<div class="upload_icon"></div>
<p>Drop your image here, or <span>browse</span></p>
<span>Supports: JPEG, PNG, PPT, PPTX, PDF <br />Max Size: 5MB</span>
</div>
</div>
</div>
</div>
<?php } ?>
function imagerename($image,$foldername,$pdo){
$image1 = $image['name'];
$filename = basename($image1);
$onlyfile = pathinfo($filename, PATHINFO_FILENAME);
$extension = pathinfo($filename, PATHINFO_EXTENSION);
$file = mt_rand();// random number
$newname = $onlyfile.'_'.$file.'.'.$extension;
$location='/images/'.$foldername.'/'.$newname;
if($extension=='png' || $extension=='jpg' || $extension=='jpeg') {
compressImage($image['tmp_name'],$location,60);
}
else{
move_uploaded_file($image['tmp_name'], $location);
}
return $newname;
}
// Compress image
function compressImage($source, $destination, $quality) {
$info = getimagesize($source);
if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source);
elseif ($info['mime'] == 'application/pdf')
$image = imagecreatefrompng($source);
elseif ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source);
imagejpeg($image, $destination, $quality);
}
现在,我上传了前两种文件类型的文件,其余 5 个为空。然后我点击提交按钮,我收到以下错误。
2) 请注意,如果我上传 1 或 2 个文件,第二个名称会继续重复,直到 7 次迭代。
【问题讨论】:
-
肯定还有其他PHP代码,接收上传的文件,调用你展示的函数?这些错误还发生在哪一行?请指出它们,因为我们看不到您的行号。
-
还有
<input type="hidden" name="docUpload[]" value="">的用途是什么,为什么你给它同样的name作为文件输入?我不禁想到这只会导致问题。 -
@ADyson,我更新了问题中的错误行, 我使用它是因为我从数据库中获取文件名,如果用户不想更新文件,然后隐藏字段将向进程发送相同的文件名。我上传了整个代码
-
未定义的偏移量意味着您正在访问数组中不存在的索引。我假设您正在循环这个数组,它是
count()7,这意味着它将运行七次。我建议翻转它。根据上传的文件数量运行一个循环,并在该循环内检查文件类型。您可以在 foereach 循环中使用 case switch 来做到这一点。 -
@VladimirMujakovic,所以我必须像这样使用 $total = count(array_filter($_FILES['docUpload']['name'])); $total = count($_FILES['docUpload']['size']);对吗?
标签: php html image file-upload