Несколько загрузок файла с необычным условием PHP - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть эта кнопка добавления, чтобы выбрать файл в поле формы загрузки:

$("#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 мне нужнозагрузите файлы, отправленные из предыдущей формы, а также получите имя файла для хранения в базе данных MySQL в виде значения массива JSON.

Ниже приведен код в файле 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 "Сгенерированное имя файла:".$ img; Я получаю результат, как и ожидалось, но в массиве вложений я получаю только одно имя файла вместо двух.

Мне нужно получить два значения имени файла внутри вложения ['attachment'] массив.Ожидаемый результат должен быть:

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

Кто-нибудь может мне помочь с этим?заранее спасибо.С уважением.

1 Ответ

0 голосов
/ 25 февраля 2019

ответ лежит на $ вложении.Вместо $ attachment ['attachment'] = $ img;

это должно быть $ attachment ['attachment'] [] = $ img;

и работает отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...