2013-10-07 4 views
0

커뮤니티,mysql query to excel

현재 보고서 작성기를 작성 중입니다. 보고서 작성자의 목표는 SQL 테이블에서 오는 주간 정보가 포함 된 Excel 문서를 전자 메일로 보내는 것입니다. 첫 번째 사람이 월요일에 그날에 로그인하면 활성화됩니다. 월요일이 공휴일 인 경우 그 날 아무도 로그인하지 않으면 데이터베이스에 타임 스탬프가 작성되지 않습니다. 사용자가 화요일에 로그인하면 마지막 시간 소인을보고 전날에 배치되었는지 확인합니다. 그렇지 않으면 화요일에 불을 질 것입니다. 이 과정의 첫 번째 단계는 다음과 같습니다

...

$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

당신은 당신이 (일 율리우스을 계산? DB에서 가져 오기? 전자 우편을 보내?) 무엇을 물어는 전혀 관련이 보이는 코드를 많이 게시하고 아직 당신은 CSV 당신이 파일을 생성하는 코드를 모두 생략 한 불행 해. 나는 당신의 문제가 무엇인지 정직하게 알 수 없다. –

+0

[PHPExcel] (http://phpexcel.codeplex.com)은'.xls' 파일을 바로 생성 할 수있는 아주 좋은 클래스이지만 가파른 학습 곡선을 가지고 있습니다. – MackieeE

+0

CSV 파일에 문제가 있다고 말하지 않았습니다. 제 질문을 매우 신중하게 읽어주십시오. 분명히 당신은 소개를 읽지 않았습니다. 내 DB에서 데이터를 수집하는 MySQL 쿼리가 있습니다 (따라서 csv 테이블이 채워지는 방식). 그 정보를 브라우저에서 열리지 않는 CSV 문서로 보내고, 임시 파일에 저장 한 다음 특정 사용자에게 전자 메일로 보낼 수있는 방법을 찾으려고합니다. –

답변

2

네, 물론 파일을 디스크에 쓰고 여러 가지 방법으로 저장할 수 있습니다. 그러나 응용 프로그램 서버와 MySQL이 동일한 물리적 호스트에 있으면 일부 단계 (즉, PHP로 파일을 만들 필요가 없음)를 저장하는 빠른 방법 일 수 있습니다. 이

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

이 직접 위치 path/to/file에서 CSV를 생성합니다 (당신이 실제로 XLS 또는 XLSX 파일을 작성하기 위해 PHP 엑셀 라이브러리를 사용할 필요가 없습니다 예) CSV 파일이 적합 할 것이라고 가정 물론입니다 그러면 PHP를 통해 전송 될 수 있습니다. 이 방법은 기존 파일을 덮어 쓸 수 없기 때문에 파일 이름은 기존 파일 이름이 아니어야합니다.

MySQL 호스트가 원격이거나 파일에 쓰기 전에 데이터를 조작해야하는 경우 쿼리의 데이터를 CSV 형식의 파일에 직접 쓰려면 fputcsv() (http://php.net/manual/en/function.fputcsv.php)을 참조하십시오.

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

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

PHP를 사용하여 스크립트를 작성하지 않고 서버가 자동으로 보내도록함으로써이를 수행 할 수있는 방법이 있습니까? –

+0

@CBC_NS 당신은 어딘가에 그것을 스크립트해야 할 것입니다 (PHP가 될 필요는 없으며 쉘 스크립트 일 수도 있습니다). MySQL은 전자 메일을 보내지 않습니다. –

+0

고맙습니다. 가능한 경우 궁금했습니다. –