首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php mysql导出excel

php mysql导出excel
EN

Stack Overflow用户
提问于 2013-02-17 19:49:36
回答 1查看 3.5K关注 0票数 0

如果页面不包含任何其他内容,则此代码可以正常工作。当我添加一个html表单时,它只给excel提供html内容。我需要使用该表单来自定义查询。如何才能使此代码与html内容一起工作?

代码语言:javascript
复制
<?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"; }

?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-17 19:58:30

正如评论中提到的,组合HTML和CSV是不可能的

但是,似乎只有在发布表单($_POST‘’excel‘)时才会输出CSV。在输出CSV后,您应该“停止”PHP脚本,如下所示:

代码语言:javascript
复制
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并将表单的“操作”设置到该位置的更好方法;

代码语言:javascript
复制
<form action='download_csv.php'>

根据表单输入更新以输出HTML或CSV,您可以考虑以下内容:

代码语言:javascript
复制
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
}

但是,通过这种方式,“查询”部分将被复制。在这种情况下,最好将查询和“格式化”部分分开。您可以通过将它们放入函数中并使用其结果来实现此目的,如下所示:

代码语言:javascript
复制
if($_POST['excel']) {
    outputCSV(getResultsFromDatabase());
    exit();
} else if ($_POST['html']{
    outputHtmlList(getResultsFromDatabase());
    exit();
}

这些函数可以放在单独的文件中,并使用PHP的“include”功能包含在其中。

这两个都只是为了说明所有的目的,并且对你的原始问题有点离题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14920750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档