我已經花了5個小時左右的時間搜索論壇和互聯網來解決這個問題。PHP導出爲CSV - 不導出最新數據
基本上,我有一個網頁,其中使用從Oracle SQL Server收集的數據生成表格。
頁面加載時,表格顯示過去7天的數據。我有一個帶有「Go」按鈕和「導出到CSV」按鈕的日期選擇字段。
如果我點擊導出按鈕,它會提示保存或打開。 CSV是好的,它有正確的數據等等等等
問題是,當我使用日期選擇字段選擇一個日期,然後打開...頁面上的表刷新顯示我具體日期的數據。如果我然後單擊導出到CSV,數據似乎仍然是頁面第一次加載時的原始數據。
這是我的代碼... 對不起,如果代碼不是很好我是一個完全新手到PHP。
if(isset($_POST['csv'])) $csv_request=$_POST['csv']; else $csv_request="";
if(isset($_POST['datepicker'])) $date_filter=$_POST['datepicker']; else $date_filter="";
$output_csv = "";
$chosenDate = $date_filter;
if($chosenDate== "" || $chosenDate == Null){
$mywhere = 'where timestamp >= trunc(sysdate)-7';
}
elseif ($chosenDate=='datepicker'){
$date_chosen = $_POST['datePicker'];
$mywhere = "where timestamp like to_date('$date_chosen', 'dd/mm/yyyy')";
}
$sql = "Select to_char(timestamp, 'dd/mm/yy hh24:mi') timestamp, site, sum(Manual_coos) Manual_COOS,Sum(Faulty_COOS) Faulty_COOS, bearer from t_ca_Processed
".$mywhere."
AND bearer = '4G'
AND faulty_coos = 1
group by timestamp, site, Manual_coos, Faulty_COOS, bearer
UNION ALL
Select to_char(timestamp, 'dd/mm/yy hh24:mi') timestamp, site, sum(Manual_coos) Manual_COOS,Sum(Faulty_COOS) Faulty_COOS, bearer from t_ca_Processed
".$mywhere."
AND bearer = '4G'
AND Manual_coos = 1
group by timestamp, site, Manual_coos, Faulty_COOS, bearer
Order by timestamp ASC";
$st = $db->execute($sql);
$output = "<table class = 'sortable' border = 1 Align = 'Center'>
<tr style = 'background-color: #f00;'>
<th>TimeStamp</th>
<th>Site</th>
<th>Manual COOS Total</th>
<th>Faulty COOS Total</th>
<th>Bearer</th>
</tr>";
$output_csv = "TimeStamp,Site,Manual COOS Total,Faulty COOS Total,Bearer\n";
$counter = 0;
while (($row = oci_fetch_row($st)) != false)
{
$output .= "<tr";
$output .= "><td>$row[0]</td>
<td align=center>$row[1]</td>
<td align=center>$row[2]</td>
<td align=center>$row[3]</td>
<td align=center>$row[4]</td></tr>\n";
$output_csv .= "$row[0],$row[1],$row[2],$row[3],$row[4]\n";
$counter ++;
}
$output .= "</table>";
unset($db);
If ($csv_request=='csv'){
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$File_name.".csv\";");
header("Content-Transfer-Encoding: binary");
echo $output_csv;
}
else
{
這是我的HTML
<!DOCTYPE html>
<html>
<head>
<style>
table.sortable tbody tr:nth-child(2n) td {
background: #DDDDDD;
}
table.sortable tbody tr:nth-child(2n+1) td {
background: #ccfffff;
}
</style>
<script type='text/javascript' src="/common/javascript/kpc_sorttable2.js"></script>
<script type='text/javascript' src='/common/flot/jquery.js'></script>
<script type="text/javascript" src="/common/jquery/ui/1.10.2/ui/jquery-ui.js"></script>
<script type="text/javascript" src="/Common/jQuery/ui/1.10.2/ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="/Common/jQuery/ui/1.10.2/ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="/Common/jQuery/ui/1.10.2/ui/jquery.ui.datepicker.js"></script>
<link rel= 'stylesheet' type=text/css href='/common/style.css'>
<script>
$(function() {
$("#datepicker").datepicker({
dateFormat: 'dd/mm/yy'
})
})
</script>
<script>
</script>
</head>
<body>
<?php generateHeader($menu,'4G Cells Down',1); ?>
<div class='whitebox'>
<form method='post' action="" name="parameters" id="parameters">
<input type='hidden' name='csv' value='csv'>
<input type='submit' value="Export as CSV" style="float: right;">
</form>
<form method='post' action="" name="parameters1" id="parameters1">
<h3>Last Refreshed <?= $page_load_time ?></h3>
<input type='hidden' name='datepicker' value='datepicker'>
<h3>Date: <input type="text" id="datepicker" name="datePicker"><input type='submit' value="Go"></h3>
<p><?= $output ?><p>
</form>
</div>
<?php
generateFooter();
?>
</body>
</html>
<?php } ?>
當我回聲$ output_csv我總是看到最新的數據集
...但是CSV始終是原始數據。我試圖回聲的CSV,我得到一個錯誤,說頭已被髮送...
我想知道,如果最初加載頁面,csv已創建,並且只有提示下載一次,我打了導出按鈕,當我有新的數據時,文件不能被重寫?
如果我不是很清楚,新的這個:)
歡呼 邁克再次抱歉
您的CSV會被瀏覽器緩存始終保持。要測試此操作,請按CTRL + F5進行頁面的硬刷新,然後嘗試下載CSV。如果它正確,那麼你的過期信息被緩存。爲了解決這個問題,只需要在文件名上添加時間,以便瀏覽器不會認爲它是相同的文件並重新下載。 –
嘗試過Crtl + F5,但沒有運氣仍然是原始數據。不過謝謝。 – Mikey
然後,也許你的問題是進一步上管 –