我正在构建一个代码,帮助我检索查询并将其导出为csv,一切正常,但id的作用是,如果我去/query.php它会立即下载csv文件,而我想点击它下载。
你能帮我解决一下这个问题吗?
这是代码..
$query = sprintf( 'SELECT * FROM hostess' );
$result = mysql_query( $query, $conn ) or die( mysql_error( $conn ) );
header( 'Content-Type: text/csv' );
header( 'Content-Disposition: attachment;filename=export.csv' );
$row = mysql_fetch_assoc( $result );
if ( $row )
{
echocsv( array_keys( $row ) );
}
while ( $row )
{
echocsv( $row );
$row = mysql_fetch_assoc( $result );
}
function echocsv( $fields )
{
$separator = '';
foreach ( $fields as $field )
{
if ( preg_match( '/\\r|\\n|,|"/', $field ) )
{
$field = '"' . str_replace( '"', '""', $field ) . '"';
}
echo $separator . $field;
$separator = ',';
}
echo "\r\n";
}
?>
答案 0 :(得分:3)
创建一个包含CSV生成脚本链接的页面。
您可以创建一个简单的HTML表单,使用查询字符串将参数传递给CSV脚本。例如:
<form action="export.php" method="get" target="_blank">
<input type="text" name="param1">
<input type="text" name="param2">
...
<input type="submit">
</form>
您的CSV导出脚本几乎不需要修改:它应该处理查询字符串变量以构建查询。类似的东西:
$where = "1 = 1";
if ($param1 = filter_input(INPUT_GET, "param1"))
{
$where .= " AND param1 = '" . mysql_real_escape_string($param1) . "'";
}
if ($param2 = filter_input(INPUT_GET, "param2"))
{
$where .= " AND param2 = '" . mysql_real_escape_string($param2) . "'";
}
...
$query = sprintf( 'SELECT * FROM hostess WHERE $where' );
当您提交表单时,它将请求导出页面传递查询字符串中的参数(例如export.php?param1 = foo&amp; param2 = bar)。该脚本将调度CSV文件。表单上添加了target=_blank
属性,以便在新的标签/窗口中加载CSV文件。
答案 1 :(得分:2)
使用链接设置另一个页面。这样,您就可以从任何页面链接到CSV文件。