【问题标题】:If the file uploaded then send the file name or else send empty in the PHP如果文件上传,则发送文件名,否则在 PHP 中发送空文件
【发布时间】: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 个为空。然后我点击提交按钮,我收到以下错误。

1)

2) 请注意,如果我上传 1 或 2 个文件,第二个名称会继续重复,直到 7 次迭代。

【问题讨论】:

  • 肯定还有其他PHP代码,接收上传的文件,调用你展示的函数?这些错误还发生在哪一行?请指出它们,因为我们看不到您的行号。
  • 还有&lt;input type="hidden" name="docUpload[]" value=""&gt; 的用途是什么,为什么你给它同样的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


【解决方案1】:
<?php

$filetypes_array = [
  "jpg" => [
    "label" => "Label 1", 
    "name" => "Name 1"
  ],
  "png" => [
    "label" => "Label 2", 
    "name" => "Name 2"
  ],
  "gif" => [
    "label" => "Label 3", 
    "name" => "Name 3"
  ],
  "pdf" => [
    "label" => "Label 4", 
    "name" => "Name 4"
  ]
];

// Build an array of your uploads with your preferred method.

$uploaded_files = [];

// Example
$uploaded_files[] = $_POST["inputname"];
$uploaded_files[] = $_POST["inputname2"];
// etc...

// Or inside a loop
foreach($somearray as $key => $value) {
  $uploaded_files[] = $value;
}

// Then run a loop ONLY as many time as you have uploads.
foreach($uploaded_files as $key => $value) {
  switch ($value) {
    case "pdf":
      // do your thing here
      $filetypes_array[$value].label; // Then do something with it
      $filetypes_array[$value].name; // Then do something with it
      break;
    case "jpg": 
      // do your thing here
      // You can access your prepeared array
      $filetypes_array[$value].label; 
      break;
    case "png":
      // another case
      break;
    case "gif":
      // another case
      break;
  }
}

没有看到你的其余代码这只是伪代码。基本上,您希望循环只运行所需的次数,这样您就不会尝试访问不存在的值。

【讨论】:

  • 使用 $total = count(array_filter($_FILES['docUpload']['name'])) 我得到上传的文件总数。但也收到错误通知:未定义的偏移量:0 in
  • 你试过var_dump()那个数组吗?可能会发生,因为您在未定义的索引上运行过滤器
  • 我认为你不需要计算你的 $_FILES,我会创建一个你拥有的上传的数组。专门抓取上传内容,也许可以对它们中的每一个进行唯一的命名,这样命名就没有问题了。检查它们是否为空,如果没有将它们压入数组,则对其进行迭代。
  • 我尝试了 var_dump,我得到了 int(3) 并且 3 是正确的。我上传了 7 个文件
  • 我没有使用开关,因为用户可以上传更多文件链接png,pdf,Doc,
猜你喜欢
  • 2018-03-29
  • 2012-06-21
  • 2022-01-27
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2012-09-07
  • 2017-10-17
相关资源
最近更新 更多