我得到了一个查询,在一个场景中,我执行查询,它显示了数据和标题等表格式的结果…我想创建的第二个场景是一个直接下载链接,它将执行查询并将结果放入.csv文件中,以便在Excel中保存或打开。我已经有了显示的代码,但我想知道如何使它为用户下载。
下面是执行和显示的一小段代码。
<?php
$month = $_POST['mydate'];
$monthfrm = date("Y-m-d", strtotime($month));
$monthhd = date("F", strtotime($month));
$monthto = date("Y-m-d", strtotime("$monthfrm . +1 month"));
$date = date("F j,Y");
if ($_POST['credsubmit']) {
print('<head>');
print('<link href="helper.css" media="screen" rel="stylesheet" type="text/css" />');
print('<link href="dropdown.css" media="screen" rel="stylesheet" type="text/css" />');
print('<link href="default.css" media="screen" rel="stylesheet" type="text/css" />');
// Connecting, selecting database
$dbconn = pg_connect("yeah we all know what goes here");
if (!$dbconn) {
die('Could not connect: ' . pg_last_error());
}// Performing SQL query
$query = "
SELECT cm.'"ID'",a.'"ID'" as '"DDI'",cm.'"Date'",c.'"Amount'",ct.'"Name'" as '"Name'",cm.'"Comments'" as '"Comments'"
FROM '"BIL_CreditMemo'" cm
LEFT JOIN '"BIL_Credit'" c ON (c.'"ID'" = cm.'"BIL_CreditID'")
LEFT JOIN '"ACT_Account'" a ON (c.'"ACT_AccountID'" = a.'"ID'")
LEFT JOIN '"BIL_val_CreditMemoReason'" ct ON (ct.'"ID'" = cm.'"BIL_val_CreditMemoReasonID'")
WHERE cm.'"Date'" >= '$monthfrm' AND cm.'"Date'" < '$monthto';
";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
// Printing results in HTML
echo "<h2 align=center style=margin-top:20>Credit Memo Report for: $monthhd</h2>";
echo "<table align=center width=60%>'n";
print('<tr class="trstyle"><td>ID</td><td>DDI</td><td>Date</td><td>Amount</td><td>Name</td><td>Comments</td></tr>');
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo "'t<tr>'n";
foreach ($line as $col_value) {
echo "'t't<td>$col_value</td>'n";
}
echo "'t</tr>'n";
}
echo "</table>'n";// Free resultset
pg_free_result($result);// Closing connection
pg_close($dbconn);
}
?>
所以这就是我到目前为止得到的,想让结果直接下载到csv文件?如有任何帮助,不胜感激。
您需要设置几个HTTP标头,然后您只需回显CSV数据。例如,
<?php
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=test.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "Name,Favourite Colour'n";
echo "Phil,Blue'n";
?>
注意,如果你的目标是Excel,那么有一些库可以让你创建。xls文件;我很喜欢PHPExcel
- 使用header()函数告诉浏览器输出将是一个八位字节流。
- 使用fputcsv()将查询结果以CSV格式写入临时文件。
- 使用readfile()发送文件的内容。
或者,有一种方法可以使fputcsv()将其数据直接写入STDOUT,但这需要一点技巧,但它可以让您跳过使用临时文件。无论哪种方式,我都会阅读readfile()的示例,因为它将帮助您设置头文件以启动您正在寻找的"文件下载"。