2013-02-17 2 views
0

이 코드는 페이지에 다른 내용이 들어 있지 않으면 문제없이 작동합니다. HTML 형식을 추가하면 HTML 컨텐트 만 제공됩니다. 그 양식을 사용하여 쿼리를 사용자 정의해야합니다. 이 코드를 html로 작업하게하려면 어떻게해야합니까? HTML을 결합 의견에 언급 된 CSV는PHP mysql export excel

그러나 수 없습니다, 형태가 ($ _POST [ '엑셀'])에 게시되는 경우에만 CSV를하고 출력하기있는 것으로

<?php 
if (isset($_POST['excel'])){ 
mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db("dbname") or die(mysql_error()); 
mysql_query("SET NAMES 'LATIN5'"); 
mysql_query("SET character_set_connection = 'LATIN5'"); 
mysql_query("SET character_set_client = 'LATIN5'"); 
mysql_query("SET character_set_results = 'LATIN5'"); 

$select = "query here"; 

$export = mysql_query ($select) or die ("Sql error : " . mysql_error()); 


$fields = mysql_num_fields ($export); 

for ($i = 0; $i < $fields; $i++) 
{ 
    $header .= mysql_field_name($export , $i) . "\t"; 
} 

while($row = mysql_fetch_row($export)) 
{ 
    $line = ''; 
    foreach($row as $value) 
    {            
     if ((!isset($value)) || ($value == "")) 
     { 
      $value = "\t"; 
     } 
     else 
     { 
      $value = str_replace('"' , '""' , $value); 
      $value = '"' . $value . '"' . "\t"; 
     } 
     $line .= $value; 
    } 
    $data .= trim($line) . "\n"; 
} 
$data = str_replace("\r" , "" , $data); 

if ($data == "") 
{ 
    $data = "\n(0) Records Found!\n";       
} 

header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=your_desired_name.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
print "$header\n$data"; } 

?> 
+0

CSV 파일을 생성하는 것 같습니다. CSV 파일에는 HTML 콘텐츠가 포함될 수 없습니다. –

+0

네, HTML 컨텐트를 텍스트로 받고 있습니다. 예를 들어,이 코드 앞에

태그를 추가하는 경우 "
"텍스트가 포함 된 하나의 필드가있는 CSV를 내보내는 중입니다. – milesh

답변

2

. 이처럼 CSV를 출력 한 후 PHP 스크립트를 '중지'해야한다 :이 방법으로

if($_POST['excel']) { 
    // query and output CSV 
    //... 


    exit(); //done outputting csv 
} 

// regular HTML form here; will only be output if NO form is sent 

, 스크립트 것입니다 :

  • 출력 형태
  • 를 전송하지 않고 방문하는 경우 HTML 양식 양식이 제출 된 경우 CSV를 출력하십시오.

그러나 두 기능을 동일한 PHP 스크립트에 넣는 것을 다시 고려해보십시오. 다른 스크립트 (예 : download_csv.php)에서 CSV를 출력하고 해당 위치로 양식의 '작업'을 설정하는 것이 더 좋은 방법 일 수 있습니다.

<form action='download_csv.php'> 

[업데이트] 폼 입력에 따라 출력 HTML 또는 CSV로 , 당신은이를 고려할 수있다 : 그러나

if($_POST['excel']) { 
    // query and output CSV 
    include 'csv-exporter.php'; 
    exit(); //done outputting csv 
} else if ($_POST['html']) { 
    // query and output HTML 
    include 'html-exporter.php'; 
    exit(); //done outputting html 
} 

의 '쿼리'부분이 중복됩니다 이런 식으로. 어떤 경우에는 질의 및 '서식 지정'부분을 분리하는 것이 가장 좋습니다. 당신은 함수에서 그들을 넣어 그렇게 그 결과를 사용할 수 있습니다, 뭔가 같은 :

if($_POST['excel']) { 
    outputCSV(getResultsFromDatabase()); 
    exit(); 
} else if ($_POST['html']{ 
    outputHtmlList(getResultsFromDatabase()); 
    exit(); 
} 

이러한 기능은 별도의 파일에 넣고 PHP의 '포함'기능을 사용하여 포함시킬 수 있습니다.

둘 다 설명 용도로만 사용되며 원래 질문에 대한 주제는 약간 벗어났습니다.

+0

그것은'exit();'와 함께 작동합니다. 그리고 양식을 보낸 후 HTML을 렌더링합니다. 페이지에는 두 가지 제출 양식이 있습니다. 하나는 출력 csv 용이고, 하나는 출력 html 테이블 용입니다. – milesh

+0

다행이었습니다! 다른 옵션을 알려 주기만하면됩니다. 논리를 분리하면 코드를보다 깨끗하고 쉽게 유지할 수 있습니다. – thaJeztah

+0

클릭 한 버튼에 따라 다른 페이지로 같은 양식을 보낼 수 있습니까? – milesh