【问题标题】:CSV is not creating and downloading in browser - PHPCSV 不在浏览器中创建和下载 - PHP
【发布时间】:2014-12-11 12:54:23
【问题描述】:

我有一组数据,我想创建 CSV 文件并想将其下载到我的浏览器中。我正在使用 Ajax 调用创建它。

这是我的 Ajax 代码:

<script type="text/javascript" language="javascript">
$(document).ready(function(){
    $("#exportBtn").click(function(){
        $.ajax({
        url: "<?php echo WEB_URL; ?>process/adminProcess.php?page=exportFile",
        async: true,
        type: "POST",
        data: $('#reportForm').serialize(),
        beforeSend: function(){
            $("#file").html("Generating Your File");
                    }
            })
        });
    });
</script>

这是我的调用所在的页面代码:

if(isset($_GET['page']) && $_GET['page']=="exportFile"){

    $data = $objadminViewFunctions->exportFile();

    header("Content-type: text/csv");
    header("Content-Disposition: attachment; filename=data.csv");
    header("Cache-Control: no-cache, no-store, must-revalidate");
    header("Pragma: no-cache"); 
    header("Expires: 0"); 

    $outstream = fopen('php://output', 'w');

    fputcsv($output, array('Serial No.', 'Report Number', 'Pallet Id', 'Type', 'Consignee', 'Damage', 'Damage Description', 'Label', 'Vessel', 'Location', 'Suryeyor'));

    foreach ($data as $sss) {
        fputcsv($output, $sss);
    }
    fclose($outstream);

 }

这是我想在 CSV 文件中输入的 $data 中的数据:

Array
(
    [0] => stdClass Object
        (
            [de_ID] => 1
            [report_ID] => 1
            [pallet_ID] => 4788
            [type] => Apple
            [consignee] => Dandrea
            [damage] => Stow Damage
            [damage_desc] => TT Damage
            [label] => Valdovinos
            [variety] => Flame Seedless
            [category_code] => Empty and/or Missing Cartons
            [pieces] => 2
            [hold] => 2
            [deck] => C
            [dDate] => 2014-12-08
            [e_ID] => 1
            [report_number] => 123
            [vessel] => 321
            [location] => Phoenix 602
            [eDate] => 2014-12-01
            [suryeyor] => Mohsin
        )

    [1] => stdClass Object
        (
            [de_ID] => 2
            [report_ID] => 3
            [pallet_ID] => 8696
            [type] => Peach
            [consignee] => Del Monte
            [damage] => Breakout Damage
            [damage_desc] => TT Damage
            [label] => Agricom
            [variety] => Mango
            [category_code] => Damage to contents of cartons
            [pieces] => 4
            [hold] => 2
            [deck] => P
            [dDate] => 2014-12-08
            [e_ID] => 3
            [report_number] => 526
            [vessel] => 748
            [location] => Atlanta 404
            [eDate] => 2014-12-01
            [suryeyor] => Amir
        )

)

我也尝试过使用数组数据,但还没有运气:

Array
(
    [0] => Array
        (
            [0] => 1
            [de_ID] => 1
            [1] => 1
            [report_ID] => 1
            [2] => 4788
            [pallet_ID] => 4788
            [3] => Apple
            [type] => Apple
            [4] => Dandrea
            [consignee] => Dandrea
            [5] => Stow Damage
            [damage] => Stow Damage
            [6] => TT Damage
            [damage_desc] => TT Damage
            [7] => Valdovinos
            [label] => Valdovinos
            [8] => Flame Seedless
            [variety] => Flame Seedless
            [9] => Empty and/or Missing Cartons
            [category_code] => Empty and/or Missing Cartons
            [10] => 2
            [pieces] => 2
            [11] => 2
            [hold] => 2
            [12] => C
            [deck] => C
            [13] => 2014-12-08
            [dDate] => 2014-12-08
            [14] => 1
            [e_ID] => 1
            [15] => 123
            [report_number] => 123
            [16] => 321
            [vessel] => 321
            [17] => Phoenix 602
            [location] => Phoenix 602
            [18] => 2014-12-01
            [eDate] => 2014-12-01
            [19] => Mohsin
            [suryeyor] => Mohsin
        )

    [1] => Array
        (
            [0] => 2
            [de_ID] => 2
            [1] => 3
            [report_ID] => 3
            [2] => 8696
            [pallet_ID] => 8696
            [3] => Peach
            [type] => Peach
            [4] => Del Monte
            [consignee] => Del Monte
            [5] => Breakout Damage
            [damage] => Breakout Damage
            [6] => TT Damage
            [damage_desc] => TT Damage
            [7] => Agricom
            [label] => Agricom
            [8] => Mango
            [variety] => Mango
            [9] => Damage to contents of cartons
            [category_code] => Damage to contents of cartons
            [10] => 4
            [pieces] => 4
            [11] => 2
            [hold] => 2
            [12] => P
            [deck] => P
            [13] => 2014-12-08
            [dDate] => 2014-12-08
            [14] => 3
            [e_ID] => 3
            [15] => 526
            [report_number] => 526
            [16] => 748
            [vessel] => 748
            [17] => Atlanta 404
            [location] => Atlanta 404
            [18] => 2014-12-01
            [eDate] => 2014-12-01
            [19] => Amir
            [suryeyor] => Amir
        )

)

【问题讨论】:

  • 你的 donesuccess ajax 部分在哪里?
  • 我已将其注释掉,因为我不需要它。它需要吗?对不起,我麻木了。
  • 对不起,我的错。检查这个:stackoverflow.com/questions/4545311/…
  • 你能在我的代码中调整它吗?我的意思是这段代码中没有涉及 PHP。这与创建 CSV 文件无关。

标签: php ajax csv fputcsv


【解决方案1】:

您的 PHP 错误。 fputcsv() 函数不知道如何处理对象,它希望第二个参数是一个数组。

尝试像这样修复它:

fputcsv($output, (array)$sss);

【讨论】:

  • 我有什么办法解决它?
  • 我无法了解 Ajax,但 PHP 代码显示标题行,然后只有“PHP 警告:fputcsv() 期望参数 1 是资源,给定空值”行。如果您的错误报告被禁止,则不会显示警告,也不会显示数据。
  • 我也尝试过使用数组,但不起作用。
  • 这里有两个部分:PHP 部分和Ajax 部分,您需要单独检查它们。首先,在浏览器中打开PHP (http://.../process/adminProcess.php?page=exportFile) 的 URL 并检查是否按预期工作(即浏览器要求您保存文件,它以正确的名称和终止保存文件,保存的文件包含您在$data 中拥有的 CSV 数据。在此部分完美运行之后(并且仅在此之后),专注于 Ajax 部分。
  • 我已经检查了我放置我的数组数据并调用它正在生成我的 csv 但数据为空的 url。表示其中没有数据。因为我在 $data 中放置了一些数组数据。
猜你喜欢
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 2013-04-17
  • 2014-07-16
  • 1970-01-01
  • 2014-12-09
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多