Как экспортировать в CSV-файл массив PHP с помощью кнопки? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть 3 диаграммы на моей странице, они сделаны из 3 массивов php. Я хотел бы распечатать данные этого массива, нажав кнопку под каждой диаграммой. Я мог бы сделать все запросы снова в файле, который будет печатать CSV-файл, но я думаю, что такой повторяющийся код был бы излишним. Я попытался поместить данные массивов на скрытые входы, сначала преобразовав их с помощью json_encode, а затем в JS, нажав эти кнопки, получу их и отправлю через ajax в файл, который снова преобразует их в объект PHP с json_decode и затем создастCSV, чтобы распечатать его. Ну, это не сработало, и я не знаю почему. Вот соответствующий код:

...
<canvas id="1" width='60%' height='15%'></canvas>
<input type="hidden" id="dataCanvas1" value="<?=htmlspecialchars(json_encode($valores1, JSON_UNESCAPED_SLASHES))?>">
<button type="button" class="btn btn-info" onclick="bajarCSV('dataCanvas1')">Bajar CSV</button>
...
<script>
function bajarCSV(id){
        var array = $("#"+id).val();
        $.ajax({
          data: {
            "array": array
          },
          dataType:"json",
          url:  "acciones/bajarCSV.php",
          type:  'post'
        });
      }
    </script>

Вот код "bajarCSV.php":

$array = json_decode($_REQUEST['array'], TRUE);

header("Content-Disposition: attachment;filename=data.csv");
header("Content-Transfer-Encoding: binary");

ob_start();
$output = fopen('php://output', 'w');
fputcsv($output, array('Fecha','Valor'));

// loop over the rows, outputting them
foreach($array as $element) {
  fputcsv($output, $element);
}

fclose($output);
return ob_get_clean();

А вот пример того, как результирующий массив формируется на "bajarCSV.php"

array (size=184)
  0 => 
    array (size=2)
      'x' => string '2019-10-02 11:30:00' (length=19)
      'y' => int 9266
  1 => 
    array (size=2)
      'x' => string '2019-10-02 11:33:00' (length=19)
      'y' => int 7831
  2 => 
    array (size=2)
      'x' => string '2019-10-02 11:36:00' (length=19)
      'y' => int 7649
  3 => 
    array (size=2)
      'x' => string '2019-10-02 12:57:00' (length=19)
      'y' => int 8509
  4 => 
    array (size=2)
      'x' => string '2019-10-02 13:00:00' (length=19)
      'y' => int 8815
  5 => 
    array (size=2)
      'x' => string '2019-10-02 13:03:00' (length=19)
      'y' => int 8666
  6 => 
    array (size=2)
      'x' => string '2019-10-02 11:42:00' (length=19)
      'y' => int 9064
  7 => 
    array (size=2)
      'x' => string '2019-10-02 11:45:00' (length=19)
      'y' => int 9013
...

Проблема, в основном, в том, что, когда я нажимаю кнопку, AJAX выдает ошибку, но ничего не возвращается, ни ошибка, ни распечатка csv, ни загрузка.

Я надеюсь, что все это хорошо объяснено, спасибо.

ОБНОВЛЕНИЕ 1

Попробовал получить извлечение, но я не могу / не могуНе знаю, как отправить мой JSON-массив на страницу, чтобы сформировать из него файл CSV, поэтому полученный в результате CSV-файл теперь заполнен HTML-кодом страницы ошибки.

...