我在MySQL数据库中有数据。我向用户发送一个URL,以获取他们的数据作为CSV文件。
我有链接的电子邮件,MySQL查询等覆盖。
当他们点击链接时,如何弹出从MySQL下载带有记录的CVS的窗口?
我已经有了所有能拿到唱片的资料。我只是不明白如何让PHP创建CSV文件,并让他们下载一个扩展名为. CSV的文件。
我在MySQL数据库中有数据。我向用户发送一个URL,以获取他们的数据作为CSV文件。
我有链接的电子邮件,MySQL查询等覆盖。
当他们点击链接时,如何弹出从MySQL下载带有记录的CVS的窗口?
我已经有了所有能拿到唱片的资料。我只是不明白如何让PHP创建CSV文件,并让他们下载一个扩展名为. CSV的文件。
当前回答
而不是:
$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,但忽略了问题的基本部分:如何链接。为了链接到CSV-file的下载,只需链接到.php-file,该文件将响应为. CSV-file。PHP头文件可以做到这一点。这可以实现一些很酷的东西,比如向查询字符串中添加变量并自定义输出:
<a href="my_csv_creator.php?user=23&othervariable=true">Get CSV</a>
my_csv_creator.php可以使用查询字符串中给出的变量,例如使用不同的或自定义的数据库查询,更改CSV的列,个性化文件名等,例如:
User_John_Doe_10_Dec_11.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;
}
}
而不是:
$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";
}
编写自己的CSV代码可能是浪费你的时间,只是使用一个包,如league/ CSV -它为你处理所有困难的事情,文档是很好的,它是非常稳定/可靠的:
http://csv.thephpleague.com/
你需要使用作曲家。如果你不知道什么是作曲家,我强烈建议你去看看:https://getcomposer.org/