簡體   English   中英

PHP導出為CSV-不導出最新數據

[英]PHP export to CSV - Doesnt Export newest Data

在過去的5個小時左右的時間里,我一直在論壇和互聯網上搜索該問題的答案。

基本上,我有一個網頁,其中使用從Oracle SQL Server收集的數據生成表。

頁面加載后,該表將顯示過去7天的數據。 我有一個帶有“轉到”按鈕和“導出為CSV”按鈕的日期選擇字段。

如果單擊“導出”按鈕,則提示是保存或打開。 CSV很好,它具有正確的數據等。

問題是,當我使用日期選擇字段選擇一個日期並單擊go ...時,頁面上的表將刷新,為我顯示特定日期的數據。 如果然后單擊“導出為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,並且僅在單擊“導出”按鈕后才得到下載提示,並且當我擁有新數據時,是否無法重寫該文件?

再次抱歉,如果即時消息不是很清楚,這是新的:)

邁克歡呼

您的文件可能已被Web服務器緩存。 如果添加了緩存無效化器和/或緩存頭,則它應該可以工作。

header("Content-Transfer-Encoding: binary");
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

有關PHP 標頭功能的更多信息,包括緩存指令。

如果您為每個更改或請求生成一個唯一的文件名,它也將被視為一個新文件,並且將禁用緩存。

# Generate a unique name for each request
$File_name = uniqid($File_name . "_");
header("Content-Disposition: attachment; filename=\"".$File_name.".csv\";");

有關功能的更多詳細信息,請參見PHP函數uniqid

問題在於,當您搜索日期時,頁面刷新和表單也會刷新,因此,當您單擊導出csv時,“請求”將獲得默認視圖。 使用當前視圖保持表單(選定數據)的更新。

這個的價值

<input type="text" id="datepicker" name="datePicker">

必須始終保持當前視圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM