Показать результат формы на той же странице с формой - PullRequest
0 голосов
/ 18 сентября 2018

Я разрабатываю функцию, которая импортирует данные из файла CSV на веб-сайт. (Пользователи, продукты и т. Д.), Однако, некоторые CSV-файлы слишком велики, например, CSV-файл для Продуктов, имеющих более 15 000 строк, и все, что мне нужно сделать, - это поместить каждую строку в массив, чем вызвать функцию из CMS в ту же в базе данных это продолжалось слишком долго, поэтому страница, даже если я изменил время возбуждения на сервере, через некоторое время все равно будет показывать потерянную конкуренцию, поэтому я решил отображать сообщение с результатами каждый раз после импорта одного продукта.

У меня есть файл с именем importFiles.php, который анализирует файл CSV и выполняет импорт. добавлен следующий код, чтобы результат отображался в режиме реального времени:

set_time_limit(0); 
ob_end_clean(); 
ob_implicit_flush(1);

В моем цикле foreach у меня есть

     foreach ($arrays as $p) {
        Groups::add($p['groupName'], $p['pfID']);// add function
        $rowsUpdated = $rowsUpdated + 1;
        echo $p['groupName'] . "::" . "has been added to database" . "<br>";
      }

    }

На мой взгляд файл Store_bulk_import.php

<form id="import-form" action="" method="post">
  <h2>Community Store Bulk Import</h2>
  <hr />
  <fieldset>
    <legend>1. Select a file for update products</legend>
    <div class="help-block">Import files must be in CSV format.</div>
    <?php
    echo $al->file('ccm-b-file', 'fileID', t('Choose File'), $csvFile);
    ?>
  </fieldset>
  <br />
  <input id="import-submit" type="submit" class="btn btn-primary" value="Import Products" style="" />
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  ?>
  <div class="container">
    <?php
    $csvfile = $_POST['fileID'];
    echo $controller->csvImport($csvfile) . "<br>";    
     ?>
  </div>

Результаты будут отображаться за пределами области, которую я хочу, большинство из них будут отображаться в верхней части страницы даже до того, как будет загружен некоторый контент CMS. enter image description here

1 Ответ

0 голосов
/ 18 сентября 2018

Если перед ob_end_clean () есть HTML, вы должны вместо этого вызвать ob_end_flush () . ob_end_clean отбрасывает все выходные данные, поэтому весь ваш HTML до этой точки теряется.

Кроме того, если в вашем коде есть какой-либо HTML-код после </div>, он не будет отправлен до завершения импорта, что также может привести к разрушению макета.

...