如果页面不包含任何其他内容,则此代码可以正常工作。当我添加一个html表单时,它只给excel提供html内容。我需要使用该表单来自定义查询。如何才能使此代码与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"; }
?>发布于 2013-02-17 19:58:30
正如评论中提到的,组合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使用这种方法,您的脚本将:
如果表单已提交,
但是,您可以重新考虑将这两个功能放在同一个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”功能包含在其中。
这两个都只是为了说明所有的目的,并且对你的原始问题有点离题。
https://stackoverflow.com/questions/14920750
复制相似问题