【问题标题】:Create CSV File by php, ajax and mysql [duplicate]通过 php、ajax 和 mysql 创建 CSV 文件 [重复]
【发布时间】:2019-10-17 13:14:55
【问题描述】:

我有以下问题:

我正在升级一个工作系统,所以我必须创建适合的代码。 我想在 php 页面和 mysql 数据库上创建一个 csv 文件。我还使用 Ajax 在运行其他 php 文件时保持在同一页面上。以下是代码 sn-ps:

带按钮的 PHP/HTML 页面

<div class="btn" id="export">Export</div>

Javascript Ajax

$("#export").click(function() {exportInfos();});

function exportInfos() {
    $.ajax({
        type: "POST",
        url: "functions/exportInfos.php",
        data: { searchterm: $("#search").val(), filterbycat: $("#filterbycat").val(), filterbytype: $("#filterbytype").val()},
        success: function(response){
            console.log("success_export");
        },
    });
}

PHP-File 创建 csv(exportInfos.php):

<?php
include ('../../config.php');

$searchterm = $_POST["searchterm"];
$filterbycat = $_POST["filterbycat"];
$filterbytype = $_POST["filterbytype"];

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename=export.csv');
    $output = fopen("php://output", "w");
        $query = "SELECT * FROM database";
        $result = mysqli_query($mysqli, $query);
        while($row = mysqli_fetch_assoc($result))
        {
                 fputcsv($output, $row);
        }
        fclose($output);
?>

我不确定问题出在哪里,但在控制台中我只看到调用了 php 脚本和日志中的 success_export 文本,但没有打开或下载文件。我认为问题可能出在 AJAX 部分,因为那是我最不确定的部分。

只要我得到一些输出文件,Ajax 部分中的数据值就可以编辑查询。 $mysqli 是配置文件中定义的连接。

【问题讨论】:

  • 另见thisthis
  • success: function(response) 您的文件位于response。让 javascript 显示保存对话框是一个不同的问题,您会发现很多问题询问如何执行此操作。浏览器会自动执行此操作,但您已将控制权从浏览器手中夺走。有关详细信息,请参阅副本。

标签: javascript php jquery mysql ajax


【解决方案1】:

我认为您需要更改下载方法。也许可以如下。

静态页面:

<!doctype html>
<html lang="en">
<body>
<div class="btn" id="export">Export</div>
</body>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
  $('#export').click(function() {exportInfos();});

  function exportInfos() {
    $.ajax({
      type: 'POST',
      url: 'functions/createCSV.php',
      data: {
        searchterm: $('#search').val(),
        filterbycat: $('#filterbycat').val(),
        filterbytype: $('#filterbytype').val(),
      },
      success: function(response) {
        if (response.filename != undefined && response.filename.length > 0) {
          window.open('functions/downloadCSV.php?filename='+response.filename);
        }
      },
    });
  }
</script>
</html>

创建CSV:

<?php

include('../../config.php');

$searchterm = $_POST["searchterm"];
$filterbycat = $_POST["filterbycat"];
$filterbytype = $_POST["filterbytype"];

//header('Content-Type: text/csv');
//header('Content-Disposition: attachment; filename=export.csv');

$outputPath = '/path/to/save/outputFile.csv';

$output = fopen($outputPath, "w");
$query = "SELECT * FROM database";
$result = mysqli_query($mysqli, $query);
while ($row = mysqli_fetch_assoc($result)) {
    fputcsv($output, $row);
}
fclose($output);

header('Content-Type: application/json');
echo json_encode(
    [
        "filename" => basename($outputPath),
    ]
);

下载CSV:

<?php

if (!empty($_GET['filename'])) {
    http_send_status(404);
}

$filepath = "/path/to/save/" . $_GET['filename'];

if (!is_file($filepath) || !is_readable($filepath)) {
    http_send_status(404);
}

header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=" . $_GET['filename']);

echo file_get_contents($filepath);

【讨论】:

    猜你喜欢
    • 2012-11-25
    • 2013-10-18
    • 2013-01-17
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多