从下载按钮导出 .csv 文件
exporting a .csv file from download button
编辑:我将 "echo($row)" 更改为 "print_r($row)",现在正在下载的 csv 中的每个数组都包含在括号中,其中包含所有提到的数据,但是如何自定义打印所有数据的方式?
现在正在打印:
数组(
[id]=>1
[名字]=>"Timmy"
)
大批 (
....
(其中每一行是 excel 电子表格中的下一行)
我如何制作此输出以便每条记录都有自己的行?例如 excel 中的第一列是 id,然后第二列是 firstname,每条记录都有自己的行?
我的 main.php 中有一个 link:
<a class="btn" href="export.php">Export</a>
然后这是我的 export.php 文件:
<?php
//open database connection
try {
$db = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8',
'DBUSER',
'DBPASS');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
echo "did not connect...";
}
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=exported-data.csv');
$sql = "SELECT * FROM table_name;";
$sth = $db->prepare($sql);
$sth->execute();
$filename = date('d.m.Y').'.csv';
$data = fopen($filename, 'w');
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
fputcsv($data, $row);
print_r($row);
}
echo "\r\n";
fclose($data);
?>
我假设您的输出应该是一个以日期作为文件名的 csv 文件,对吗?
你能试试这个吗:
更新代码
<?php
//open database connection
try {
$db = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8',
'DBUSER',
'DBPASS');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
echo "did not connect...";
}
$sql = "SELECT * FROM table_name";
$sth = $db->prepare($sql);
$sth->execute();
$filename = date('d.m.Y').'.csv';
$data = fopen($filename, 'w');
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
fputcsv($data, $row);
}
fclose($data);
?>
代码会因为“.”而中断。放错地方了。
$filename = date('d.m.Y').'.csv';
与 $filename = 'date('d.m.Y').'.csv';
不同
@NoReceipt4Panda:我无法发表评论,所以代码已更新。
您应该使用 $sth = $db->prepare($sql);
而不是 $sth = $conn->prepare($sql);
.
您没有名称为 $conn
.
的变量
为了将关联数组正确放入文件中,您需要解析数组,然后将行放入文件中:
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
$csv = implode(',', $row) . "\n";
fwrite($data, $csv);
print_r($csv);
}
编辑:我将 "echo($row)" 更改为 "print_r($row)",现在正在下载的 csv 中的每个数组都包含在括号中,其中包含所有提到的数据,但是如何自定义打印所有数据的方式?
现在正在打印:
数组( [id]=>1 [名字]=>"Timmy" ) 大批 ( ....
(其中每一行是 excel 电子表格中的下一行)
我如何制作此输出以便每条记录都有自己的行?例如 excel 中的第一列是 id,然后第二列是 firstname,每条记录都有自己的行?
我的 main.php 中有一个 link:
<a class="btn" href="export.php">Export</a>
然后这是我的 export.php 文件:
<?php
//open database connection
try {
$db = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8',
'DBUSER',
'DBPASS');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
echo "did not connect...";
}
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=exported-data.csv');
$sql = "SELECT * FROM table_name;";
$sth = $db->prepare($sql);
$sth->execute();
$filename = date('d.m.Y').'.csv';
$data = fopen($filename, 'w');
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
fputcsv($data, $row);
print_r($row);
}
echo "\r\n";
fclose($data);
?>
我假设您的输出应该是一个以日期作为文件名的 csv 文件,对吗?
你能试试这个吗:
更新代码
<?php
//open database connection
try {
$db = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8',
'DBUSER',
'DBPASS');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
echo "did not connect...";
}
$sql = "SELECT * FROM table_name";
$sth = $db->prepare($sql);
$sth->execute();
$filename = date('d.m.Y').'.csv';
$data = fopen($filename, 'w');
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
fputcsv($data, $row);
}
fclose($data);
?>
代码会因为“.”而中断。放错地方了。
$filename = date('d.m.Y').'.csv';
与 $filename = 'date('d.m.Y').'.csv';
@NoReceipt4Panda:我无法发表评论,所以代码已更新。
您应该使用 $sth = $db->prepare($sql);
而不是 $sth = $conn->prepare($sql);
.
您没有名称为 $conn
.
为了将关联数组正确放入文件中,您需要解析数组,然后将行放入文件中:
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
$csv = implode(',', $row) . "\n";
fwrite($data, $csv);
print_r($csv);
}