我在MySQL数据库中有数据。我向用户发送一个URL,以获取他们的数据作为CSV文件。
我有链接的电子邮件,MySQL查询等覆盖。
当他们点击链接时,如何弹出从MySQL下载带有记录的CVS的窗口?
我已经有了所有能拿到唱片的资料。我只是不明白如何让PHP创建CSV文件,并让他们下载一个扩展名为. CSV的文件。
我在MySQL数据库中有数据。我向用户发送一个URL,以获取他们的数据作为CSV文件。
我有链接的电子邮件,MySQL查询等覆盖。
当他们点击链接时,如何弹出从MySQL下载带有记录的CVS的窗口?
我已经有了所有能拿到唱片的资料。我只是不明白如何让PHP创建CSV文件,并让他们下载一个扩展名为. CSV的文件。
当前回答
嘿它工作得很好....!!!!谢谢Peter Mortensen和Connor Burton
<?php
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
ini_set('display_errors',1);
$private=1;
error_reporting(E_ALL ^ E_NOTICE);
mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());
$start = $_GET["start"];
$end = $_GET["end"];
$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00' AND created<='{$end} 23:59:59' ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
$result.="{$row['email']},";
$result.="\n";
echo $result;
}
?>
其他回答
而不是:
$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00' AND created<='{$end} 23:59:59' ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
$result.="{$row['email']},";
$result.="\n";
echo $result;
}
Use:
$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00' AND created<='{$end} 23:59:59' ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
echo implode(",", $row)."\n";
}
在$output变量中放入CSV数据,并返回正确的报头
header("Content-type: application/download\r\n");
header("Content-disposition: filename=filename.csv\r\n\r\n");
header("Content-Transfer-Encoding: ASCII\r\n");
header("Content-length: ".strlen($output)."\r\n");
echo $output;
编写自己的CSV代码可能是浪费你的时间,只是使用一个包,如league/ CSV -它为你处理所有困难的事情,文档是很好的,它是非常稳定/可靠的:
http://csv.thephpleague.com/
你需要使用作曲家。如果你不知道什么是作曲家,我强烈建议你去看看:https://getcomposer.org/
下面是@Andrew发布的php.net函数的改进版本。
function download_csv_results($results, $name = NULL)
{
if( ! $name)
{
$name = md5(uniqid() . microtime(TRUE) . mt_rand()). '.csv';
}
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename='. $name);
header('Pragma: no-cache');
header("Expires: 0");
$outstream = fopen("php://output", "wb");
foreach($results as $result)
{
fputcsv($outstream, $result);
}
fclose($outstream);
}
它真的很容易使用,并且与MySQL(i)/PDO结果集一起工作。
download_csv_results($results, 'your_name_here.csv');
如果完成了页面,请记住在调用此函数后退出()。
公共函数actionExportnotificationresponselogdata() {
$fileName = '/tmp/notificationresponselogs_' . date('d-m-Y-g-i-h') . '.csv';
$f = fopen($fileName, 'w');
fputs( $f, "\xEF\xBB\xBF" ); //for utf8 support in csv
$csv_fields=array();
$csv_fields[] = 'heading1';
$csv_fields[] = 'heading2';
$csv_fields[] = 'heading3';
$csv_fields[] = 'heading4';
$csv_fields[] = 'heading5';
$csv_fields[] = 'heading6';
$csv_fields[] = 'heading7';
$csv_fields[] = 'heading8';
fputcsv($f, $csv_fields);
$notification_log_arr = $notificationObj->getNotificationResponseForExport($params); //result from database
if (count($notification_log_arr) > 0) {
$serialNumber=1;
foreach ($notification_log_arr AS $notifaction) {
$fields = array();
$fields['serialNumber']= $serialNumber ;
$fields['fld_1']= $notifaction['fld_1'] ;
$fields['fld_2']= $notifaction['fld_2'] ;
$fields['fld_3']= $notifaction['fld_3'] ;
$fields['fld_4']= $notifaction['fld_4'] ;
$fields['fld_5']= $notifaction['fld_5'] ;
$fields['fld_6']= $notifaction['fld_6'] ;
$fields['fld_7']= $notifaction['fld_7'] ;
// print_r($fields); die;
fputcsv($f, $fields,",");
$serialNumber++; }
fclose($f);
if (file_exists($fileName)) {
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename="."exportlog".date("Y-m-d_H:i").".csv");
header("Content-length: " . filesize($fileName));
header("Pragma: no-cache");
header("Expires: 0");
readfile($fileName);
unlink($fileName);
exit;
}
}