无法在后续请求中删除下载文件对话框

时间:2015-02-03 01:32:54

标签: php mysql excel

我使用以下代码将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_remove()和几种从代码重新加载页面的方法,但没有成功。

1 个答案:

答案 0 :(得分:0)

好的,我通过将" Excel" -export移动到我用$ _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
}