【问题标题】:Multiple Upload File with Unusual Condition PHP具有异常情况PHP的多个上传文件
【发布时间】:2019-02-24 17:03:22
【问题描述】:

我有这个添加按钮来选择上传表单字段中的文件:

$("#add_attachment").on('click', function() {
  var no_attachment = parseInt($('#noa').val()) + 1;
  $('#noa').val(no_attachment);
  $("#tbody_attachment").append("<tr><td bgcolor='#d9d9d9' class='td-data_1'><div class='col-xs-12'><input type='number' class='form-control' name='noa_save[]' id='noa_save' placeholder='No' value='" + no_attachment + "' /></div></td><td bgcolor='#d9d9d9' class='td-data_1'><div class='col-xs-12'><input type='file' class='form-control' name='attachment_save[]' id='attachment_save' placeholder='Attachment'/></div></td><td bgcolor='#d9d9d9' class='td-data_1'><div align='center'><input type='button' name='attachment' id='remove_attachment' value='Remove' style='font-size:16px; width: 98%;'/></div></td></tr>");
});

$("#tbody_attachment").on('click', '#remove_attachment', function() {
  $(this).closest('tr').remove();
  var no_attachment = $('#noa').val();
  $('#noa').val(parseInt(no_attachment) - 1);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post" action="save_sop.php" enctype="multipart/form-data">
  <div align="center">
    <table class="table" id="t_attachment">
      <thead>
        <tr>
          <th width="10%" bgcolor="#8eb4e3" class="td-data_1">
            <div align="center">
              <font size="3dp"><strong>No</strong></font>
            </div>
          </th>
          <th bgcolor="#8eb4e3" class="td-data_1">
            <div align="center">
              <font size="3dp"><strong>Attachment</strong></font>
            </div>
          </th>
          <th width="10%" bgcolor="#8eb4e3" class="td-data_1">
            <div align="center">
              <font size="3dp"><strong>Button</strong></font>
            </div>
          </th>
        </tr>
      </thead>
      <tbody id="tbody_attachment">
        <tr>
          <td bgcolor="#d9d9d9" class="td-data_1">
            <div class="col-xs-12">
              <input type="number" class="form-control" name="noa" id="noa" placeholder="No" value="0" />
            </div>
          </td>
          <td bgcolor="#d9d9d9" class="td-data_1">
            <div class="col-xs-12">
              <div align="justify">
                <font size="3dp"><strong>Choose file after clicking Add button</strong></font>
              </div>
            </div>
          </td>
          <td bgcolor="#d9d9d9" class="td-data_1">
            <div align="center"><input type="button" name="add_attachment" id="add_attachment" value="Add" style="font-size:16px; width: 98%;" /></div>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</form>

您可以运行上面的代码来了解表单的工作原理。

在 save_sop.php 文件中,我必须上传之前表单提交的文件,并将文件名作为 JSON 数组值存储到 MySQL 数据库中。

这里是 save_sop.php 文件中的代码:

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  include 'con.php';
  
  $total_attachment = mysqli_real_escape_string($con, $_POST['noa']);
  $attachment["no"] = $_POST['noa_save'];
  
  foreach($_FILES['attachment_save']['name'] as $filename) {

        $imgFile = $filename;
        $tmp_dir = $_FILES['attachment_save']['tmp_name'];
        $imgSize = $_FILES['attachment_save']['size'];

        $folder = 'sop/attachment/'; // upload directory
        $imgExt = strtolower(pathinfo($imgFile, PATHINFO_EXTENSION)); // get image extension
        // valid image extensions
        $valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); // valid extensions
        // rename uploading image
        $img = rand(1000, 1000000) . "." . $imgExt; //generate the random file name
        // allow valid image file formats
        if (in_array($imgExt, $valid_extensions)) {
        // Check file size '50MB'
            if ($imgSize < 5000000) {
                //move_uploaded_file($tmp_dir, $folder . $img);
            } else {
                $errMSG = "Sorry, your file is too large.";
            }
        } else {
            $errMSG = "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
        }

        echo "Generated File Name: " . $img . "<hr />";
        $attachment['attachment'] = $img;
        
    }
    
    $attachment_save = json_encode($attachment, true);
    echo $attachment_save;
  
}

?>

当 echo $attachment_save 调用时,我得到的结果如下。

Generated File Name: 430609.jpg
<hr />
Generated File Name: 575033.jpg
<hr />
{"no":["1","2"],"attachment":"575033.jpg"}

在 foreach 循环中,我调用了 echo "Generated File Name:" 。 $img; 我确实得到了预期的结果,但是在附件数组中,我只得到一个文件名而不是两个。

我需要在 attachment['attachment'] 数组中获取两个文件名值。预期的结果应该是:

{"no":["1","2"],"attachment":["430609.jpg", "575033.jpg"]}

谁能帮我解决这个问题?提前致谢。 问候。

【问题讨论】:

  • $attachment['attachment'] = $img; 每次迭代都会覆盖该值。最后一个获胜
  • @kerbholz 您好,我认为您是正确的。当我一遍又一遍地尝试时,似乎最后一个值将始终是最后一个 foreach 值。我该如何防止这种情况?我需要让它显示所有数据而不是显示最后一个数据。感谢您的提醒。

标签: php file-upload


【解决方案1】:

答案在于 $附件。而不是 $attachment['attachment'] = $img;

应该是 $attachment['attachment'][] = $img;

它运行良好。

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2020-01-17
    • 2015-05-21
    • 1970-01-01
    • 2015-10-20
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多