我使用以下代码将 mysql 查询的结果下载到 Excel 文件。
function Button14Click($sender, $params)
{
IF ($this->ReadTheDates($Date1,$Date2))
{
mysql_connect('myServer','user','password');
mysql_select_db('myDatabase');
$SQLstr2 = $this->GetMySQL();
$result = mysql_query($SQLstr2);
// filename for download
$filename = "File " .$Date1.' '.$Date2. ".xls";
header("Content-Disposition: attachment; filename=\"$filename\"");
$flag = false;
while($row = mysql_fetch_assoc($result))
{
if(!$flag)
{ // display field/column names as first row
echo implode("\t", array_keys($row)) . "\r\n";
$flag = true;
}
array_walk($row, 'cleanData');
echo implode("\t", array_values($row)) . "\r\n";
}
exit();
}
将 header 设置为通过文件下载数据后,例如 header("content disp ...),此 header 将保持事件状态,直到我手动重新加载页面。如果我在以下命令中创建并运行新的查询未下载 我仍然收到包含我刚刚下载的文件的下载对话框!
如何将 header 重置或删除到如上所述使用命令 header (...)更改 header 之前的状态,并返回到“正常”执行?
我尝试过使用 header_remove() 以及多种从代码中重新加载页面的方法,但没有成功。
最佳答案
好吧,我通过将“Excel”导出移动到一个新窗口来解决我的问题,我用 $_SESSION 向量向该窗口传递了我的参数。请参阅下面的示例。 现在可以了。
function Button14Click($sender, $params)
{
session_start();
$_SESSION['datt1'] = $this->JTDatePicker1->Date;
$_SESSION['datt2'] = $this->JTDatePicker2->Date;
$_SESSION['PilotIdx'] = $this->JTLookupComboBox1->getSelectedValue();
$_SESSION['FlygplanIdx'] = $this->JTLookupComboBox4->getSelectedValue();
$_SESSION['KlubbIdx'] = $this->JTLookupComboBox2->getSelectedValue();
?>
<script type="text/javascript">
myWindow = window.open("ExcelDownloadForm.php");
</script>
<?php
}
关于php - 无法摆脱后续请求的下载文件对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28289931/