Saturday, 17 August 2013

download csv from database error

download csv from database error

I have a database that I am downloading certain tables from like the staff
table and an office table. I have the button to download it to a csv file
so it can be opened into excel easily. This code works great when I'm on
my local machine but the minute I upload it to a server I get warning
messages that the header files have already been sent by another page and
then the sql statement dumps the requested information onto the page.
so here is the code I'm using
button from main page
<form method="get" action="export_myStaff.php">
<button type="submit" class="Mybutton">Download Staff
Directory</button>
</form>
export_myStaff.php
require_once('../Connections/myconnections.php');
// Connect to the database
$link = mysql_connect($hostname, $username, $password);
mysql_select_db($database_testSite );
require_once('csv_myStaff.php');
$staff_table="myStaff_tbl";
exportMysqlToCsv($staff_table);
csv_myStaff.php
function exportMysqlToCsv($staff_table)
{
$csv_terminated = "\n";
$csv_separator = ",";
$csv_enclosed = '"';
$csv_escaped = "\\";
$sql_query = "SELECT * FROM myStaff_tbl"
// Gets the data from the database
$result = mysql_query($sql_query);
$fields_cnt = mysql_num_fields($result);
$schema_insert = '';
for ($i = 0; $i < $fields_cnt; $i++)
{
$l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped .
$csv_enclosed,
stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
$schema_insert .= $l;
$schema_insert .= $csv_separator;
} // end for
$out = trim(substr($schema_insert, 0, -1));
$out .= $csv_terminated;
// Format the data
while ($row = mysql_fetch_array($result))
{
$schema_insert = '';
for ($j = 0; $j < $fields_cnt; $j++)
{
if ($row[$j] == '0' || $row[$j] != '')
{
if ($csv_enclosed == '')
{
$schema_insert .= $row[$j];
} else
{
$schema_insert .= $csv_enclosed .
str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
$row[$j]) . $csv_enclosed;
}
} else
{
$schema_insert .= '';
}
if ($j < $fields_cnt - 1)
{
$schema_insert .= $csv_separator;
}
} // end for
$out .= $schema_insert;
$out .= $csv_terminated;
} // end while
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . strlen($out));
// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
$filename = $filename."_".date("Y-m-d_H-i",time());
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
//header("Content-Disposition: attachment; filename=$filename");
echo $out;
exit;
}
any ideas why it would work on my localhost but not on a server?

No comments:

Post a Comment