2012-04-24 2 views
0

MySQL 데이터를 CSV 파일로 내보내는 데 약간의 문제가 있습니다. 테이블에서 데이터를 올바르게 출력하지만 csv 파일 끝에 html 페이지 코드도 인쇄됩니다!PHP를 사용하여 MySQL 데이터를 CSV 파일로 내보내기

billing_id;customer_id;user_id;trans_id;transfer;balance;created;text;credit;sender_id  
257;29;;-1;0;500000;1330930434;Payment;500000;  
258;29;;-1;200000;300000;1330930465;Sender ID reg.;0;jkjjhh  
284;32;;-1;0;1000000;1331708884;Payment;1000000;   
285;32;564;268;-120;999880;1331709106;SMS send;;   
286;32;;-1;0;1000000;1331709234;Payment;120;   
287;32;564;269;0;1000000;1331723634;SMS send;; 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml">  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <title>Client Manger</title>   
    <link rel="stylesheet" href="/style/my-style.css">  
    <form action='./' method='post'>   
    <input type="hidden" name="action" value="billing" class="text">   
    <input type="hidden" name="customer_id" value="" /> 

어떤 이유가있을 수 있습니다 :

다음은 내 코드

$file="billing"; 
    $i=0; 
    $values = mysql_query("SELECT * FROM billing"); 
    $rown=0; 
    while($row = mysql_fetch_assoc($values)){ 
    if($rown++==0) 
     $csv_output.=implode(";",array_keys($row))."\n"; 
     $csv_output.=implode(";",array_values($row))."\n"; 
} 

$filename = $file."_".date("Y-m-d_H-i",time()); 
header("Content-type: text/csv"); 
header("Content-disposition: csv" . date("Y-m-d") . ".csv"); 
header("Content-disposition: filename=".$filename.".csv"); 
print $csv_output; 
} 

출력입니까?

고맙습니다.

+0

붙여 넣은 코드 외부에있는 것처럼 보입니다. 들여다 보면서 우리에게 뭔가를 안겨 주었으면 좋겠어? – nyson

+0

헤더를 자동으로 만드는 프레임 워크에서 실행 중이십니까? – Snowcrash

답변

1

당신은 그렇지 않으면 print $csv_output; 페이지의 나머지 후 exit; 또는 die(); 가질 필요가 인쇄됩니다 (따라서 CSV에 포함) (내가 생각하는 가까운 } (이외의 것은 if 문의 끝)입니다) .


그냥 생각 : 양식을 출력하는 다른 하나는 CSV를 출력 한 : 그것은 더 나은 아이디어가이 문제를 처리하기 위해 두 개의 PHP 파일을 가질 수 있습니다. die/exit 또는 매우 긴 else 문을 사용하는 것을 피할 수있을뿐만 아니라 전반적으로 더 깨끗한 코드가됩니다. 다른 생각으로


, 당신은 do...while 당신이 뭔가 처음으로 (그리고 첫 번째 시간)을 일해야 할 모든 시간을 사용하는 것이 더 낫다. 따라서 더 좋은 옵션 일 수 있습니다.

$row = mysql_fetch_assoc($values); 
$csv_output.=implode(";",array_keys($row))."\n"; 
do 
{ 
    // notice how there is no flag needed! 
    // also, you don't need to call 'array_values' when imploding 
    $csv_output.=implode(";",$row)."\n"; 
}while($row = mysql_fetch_assoc($values)); 
+0

감사합니다. cwallenpoole, 완료하고 성공했습니다.^_ ^ – alkhader

관련 문제