【问题标题】:Why can't I export MySQL table values as a CSV file in this Codeigniter application?为什么我不能在此 Codeigniter 应用程序中将 MySQL 表值导出为 CSV 文件?
【发布时间】:2021-03-20 17:13:23
【问题描述】:

我一直在使用 CodeIgniter 3.1.8 和 Twig 开发博客应用程序。

该应用程序有一个时事通讯订阅系统。我使用了一个名为 newsletter 的表,它有 3 列:idemailsubscription_date

Subscribers 类控制器中,我创建了一个 export() 方法,打算将订阅者导出为 CSV 文件:

public function export(){
    $data = $this->Static_model->get_static_data();
    $subscribers = $this->Newsletter_model->fetchSubscribers();

    $file_name = 'subscribers_'.date('Ymd').'.csv'; 
        header("Content-Description: File Transfer"); 
        header("Content-Disposition: attachment; filename=$file_name"); 
        header("Content-Type: application/csv;");


    // CSV creation 
    $file = fopen('php://output', 'w');

    $header = array("Email", "Subscription Date"); 
    fputcsv($file, $header);
    foreach ($subscribers as $key => $value) { 
        fputcsv($file, $value); 
    }
    fclose($file); 
    redirect('dashboard/subscribers'); 
}

Newsletter_model 模型中:

public function fetchSubscribers() {
    $this->db->select('email, subscription_date');
    $this->db->order_by('newsletter.id', 'DESC');
    $query = $this->db->get('newsletter');
    return $query->result();
}

导出表格

<?php echo form_open(base_url('dashboard/subscribers/export'),  ['class' => 'ml-auto']); ?>
     <button type="submit" class="btn btn-sm btn-success"><i class="fa fa-file mr-1"></i> Export CSV</button>
<?php echo form_close(); ?>

问题

由于我无法弄清楚的原因,只导出了表头,而不是值(电子邮件和日期)。

我做错了什么?

【问题讨论】:

    标签: php mysql codeigniter codeigniter-3


    【解决方案1】:

    好的,这是我通过将您的代码复制到全新安装的 Codeigniter 中发现的。

    1. 在项目根目录上创建了一个“文件”目录
    2. 我已经自动加载了“database”库和“url”助手;
    3. 按照您的描述,使用 mockaroo 创建了一个时事通讯表格;
    4. 我没有考虑请求标头、下载或重定向,因为它们对我来说似乎没有错
    • Newsletter_model 上没有任何变化,只是在控制器上。

    这是我的导出()

    $header = array("Email", "Subscription Date");
    $subscribers = $this->newsletter->fetchSubscribers();
    
    $file_name = 'subscribers_'.date('Ymd').'.csv'; 
    $file = fopen(BASEPATH . '../files/' . $file_name, 'w');
    
    fputcsv($file, $header);
    foreach ($subscribers as $row) {
        fputcsv($file, [$row->email, $row->subscription_date]);
    }
    
    fclose($file);
    

    发生了什么:

    1. 您的模型返回一个包含对象的数组。因此,您的 $row 将是一个对象。
    2. fputcsv 需要一个数组作为第二个参数,就像您对 $header 所做的那样

    我认为这对你有用。 :)

    【讨论】:

    • 它做同样的事情:CSV 中不存在值,只有列。
    • 你确定吗?我生成了数千封随机电子邮件,并且“文件”目录上的 CSV 已正确生成。你实现了我发送的内容吗?
    • 这是我的项目副本(带有 SQL 表)>> wetransfer.com/downloads/…
    • 请参阅 this 拉取请求。谢谢!
    • 那里的代码是行不通的代码。检查我发送的 wetransfer 并在您的项目上进行测试。
    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 2013-12-26
    • 2019-12-31
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多