首页 > 解决方案 > 上传随机文件时出现错误

问题描述

我的页面上有多种文件类型。我的问题是,如果我首先开始上传文件或图像,那么它就可以工作。

在此处输入图像描述

如果我随机上传文件,那么我会收到错误消息。

在此处输入图像描述

这是完整的代码。

HTML

<div class="container">
<form action="process.php" method="post" name="multiplefiles" enctype="multipart/form-data" id="myprofile">

    <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 } ?>

</div>
<input type="submit" name="send" value="Submit" class="btn btn-primary">
</div>
</form>
</div>

过程

if (isset($_POST['send'])) {
  
$total = count(array_filter($_FILES['docUpload']['name']));

for($i=0; $i < $total; $i++) {

if(isset($_FILES['docUpload']['name'][$i]) && $_FILES['docUpload']['name'][$i] != "")
{
    $foldername="uploads";
    $uploadLabel=$_POST['docUploadLabel'][$i];

      $image1  = $_FILES['docUpload']['name'][$i];
      $filename  = basename($image1);
      $onlyfile = pathinfo($filename, PATHINFO_FILENAME);
      $extension = pathinfo($filename, PATHINFO_EXTENSION);

      $file      = mt_rand();// random number 
      $newname   = $onlyfile.'_'.$file.'.'.$extension;
       
      echo $location='images/'.$foldername.'/'.$newname;

      if($extension=='png' || $extension=='jpg' || $extension=='jpeg') { 
        compressImage($_FILES['docUpload']['tmp_name'][$i],$location,60); 
      } 
      else{ 
        move_uploaded_file($_FILES['docUpload']['tmp_name'][$i], $location); 
      }
      $uploadDoc=$newname;


 }
 else{
   if (isset($_POST['docUpload'][$i]) && $_POST['docUpload'][$i]!= "") {
      $uploadLabel=$_POST['docUploadLabel'][$i];
      $uploadDoc=$_POST['docUpload'][$i];
    }
 }

$dataupload=array(
             'upload_label'=>$uploadLabel,
             'upload_name'=>$uploadDoc,
          );
 echo "<pre>";
 print_r($dataupload);
 
}

}

echo"<pre>"; var_dump($_FILES);输出。我在标签 4 和标签 6 中上传了图片

在此处输入图像描述

标签: phphtmlfile-upload

解决方案


发生这种情况是因为如果条件相同,则加倍,使 $uploadname 和 $uploadlable 变为未定义

<?php
$filedemo=array('docUpload'=>array(
    array('label'=>'Label1','file'=>null),
    array('label'=>'Label2','file'=>'file2'),
    array('label'=>'Label3','file'=>null),
    array('label'=>'Label4','file'=>'file4'),
    array('label'=>'Label5','file'=>null),
    array('label'=>'Label6','file'=>null),
    array('label'=>'Label7','file'=>null),
   )
);
$total = count($filedemo['docUpload']);

for($i=0; $i < $total; $i++) {

if(isset($filedemo['docUpload'][$i]['file']) && !empty($filedemo['docUpload'][$i]['file']))
{
    $uploadLabel=$filedemo['docUpload'][$i]['label'];
    $uploadDoc=$filedemo['docUpload'][$i]['file'];

}
else{
     $uploadLabel=$filedemo['docUpload'][$i]['label'];
     $uploadDoc=$filedemo['docUpload'][$i]['file'];
}

$dataupload=array(
     'upload_label'=>$uploadLabel,
     'upload_name'=>$uploadDoc,
  );
 echo "<pre>";
 print_r($dataupload);
}

示例:https ://3v4l.org/dalJP


推荐阅读