0

ページに他のコンテンツが含まれていない場合、このコードは問題なく機能します。HTMLフォームを追加すると、HTMLコンテンツのみがExcelに提供されます。クエリをカスタマイズするには、そのフォームを使用する必要があります。このコードを HTML コンテンツで動作させるにはどうすればよいですか?

<?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"; }

?>
4

1 に答える 1

2

コメントで述べたように、HTML と CSV を組み合わせることはできません

ただし、フォームが投稿された場​​合($_POST['excel'])のみCSVを出力しているようです。次のように、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 の「include」機能を使用して含めることができます。

どちらもすべての目的を説明するためのものであり、元の質問のトピックから少し外れています。

于 2013-02-17T11:58:29.630 に答える