2013-10-07 137 views
0

社區,mysql查詢excel

我目前正在使用報告生成器。報告生成器的目標是發送一封帶有excel文檔的電子郵件,其中包含來自sql表的每週信息。當第一個人在星期一登錄時激活它。如果星期一是假期,並且當天沒有人登錄,則數據庫中將不會創建時間戳。當用戶在星期二登錄時,它會查看上次的時間戳,看看是否前一天被放置。如果沒有,它會在星期二開火。

在這個過程中的第一步看起來像這樣...

$today = cal_to_jd(CAL_GREGORIAN,date("m"),date("d"),date("Y")); 
$yesterday = date('Y-m-d', strtotime($date .' -1 day')); 
$holiday = false; 
if(jddayofweek($today,1) == 'Tuesday') 
{ 
    if(mysql_num_rows(mysql_query("select report_date from report_builder where report_date = '{$yesterday}'")) == 0) 
    { 
     $holiday = true; 
    } 
} 
if(jddayofweek($today,1) == 'Monday' || $holiday === true) 
{ 
    $today = mysql_query("select report_date from report_builder where report_date = CURDATE()"); 
    if(mysql_num_rows($today) == 0) 
    { 
     $date = date('Y-m-d H:i:s',time()-(7*86400)); 
     mysql_query("INSERT into report_builder (report_date) VALUES (CURDATE())"); 

//更多代碼在這裏

**此特定發佈問題如下:

是它可能發送信息到一個csv文件,實際上並沒有打開,這樣用戶可以看到,而是保存到一個臨時文件?可以這樣做,它不會發送背景的HTML?**

一旦完成,我想發送文件給用戶使用我現在的代碼,看起來像這樣...

require("class.phpmailer.php"); 
$mail = new PHPMailer(); 
$mail->From = "**********"; 
$mail->AddAddress("*************"); 
$mail->Subject = "Test"; 
$mail->Body = "HI"; 
$fileName = $_FILES['file']['name']; 
$tmpName = $_FILES['file']['tmp_name']; 
$fileName = addslashes($fileName); 
echo $fileName; 
$mail->AddAttachment("temporary file path"); 
if(!$mail->Send()) 
{ 
    echo 'Message was not sent.'; 
    echo 'Mailer error:'.$mail->ErrorInfo; 
} 
+1

你張貼大量的代碼,看起來完全無關的,你問什麼(計算儒略日?從數據庫獲取?發送電子郵件?)可是你卻忽略所有的代碼來生成CSV文件我不高興。我真的不知道你的問題是什麼。 –

+0

[PHPExcel](http://phpexcel.codeplex.com)是一個非常好的類,可直接生成'.xls',但學習曲線陡峭。 – MackieeE

+0

我沒有說我有任何CSV文件有問題。請再次仔細閱讀我的問題。顯然你沒有閱讀過這篇介紹。我有一個從我的數據庫收集數據的MySQL查詢(因此如何填充csv表)。我試圖找到一種方法將該信息發送到未在瀏覽器中打開的csv文檔,而不是如果它可以保存到臨時文件,然後通過電子郵件發送給特定用戶。 –

回答

2

是的,您當然可以將文件寫入磁盤並以多種方式進行保存。但是,如果您的應用程序服務器和您的MySQL位於同一臺物理主機上,我將指出您可能是一種快速保存某些步驟的方式(即不必在PHP中創建文件)。當然,這是假設一個CSV文件將是合適的(即你實際上並不需要使用PHP的Excel庫來構建一個XLS或XLSX文件)

SELECT [fields] INTO OUTFILE '/path/to/file' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM your_table; 

這將直接在位置path/to/file創建CSV的在可以通過PHP發送的機器上。請注意,文件名不能是現有文件名,因爲這種方法不允許覆蓋現有文件。

如果您的MySQL主機是遠程的,或者您在寫入文件之前需要操縱數據,我建議您查看fputcsv()http://php.net/manual/en/function.fputcsv.php),以便將查詢中的數據直接寫入CSV格式的文件。

$file = fopen('/path/to/file.csv', 'w'); 

while ($row = [YOUR DATABASE FETCH HERE]) { 
    fputcsv($file, $row); 
} 
+0

有沒有辦法通過讓服務器自動發送出去而不必使用php編寫腳本? –

+0

@CBC_NS你將不得不將腳本編寫到某處(不需要是PHP,可以是shell腳本或其他)。 MySQL不發送電子郵件。 –

+0

謝謝,我只是好奇,如果這是可能的。 –